使用流在node.js中传输数据

使用流在node.js中传输数据,node.js,stream,Node.js,Stream,设置:我正在从数据库读取数据,并将数据集作为CSV文件发送电子邮件。数据以500行为单位读取,我使用CSV将记录写入流。然后我想使用电子邮件将文件作为附件发送 选项1(我不想做的事情): 创建临时文件 创建对该文件的写入流 写入所有CSV记录 将所有内容读回内存,并附加到电子邮件中 选项2(我想做但不太知道如何做): 创建一个可写流 创建可读流 以某种方式将写入从(1)传输到(2) 将可写流传递给csv 将可读流传递给mailgun 获取数据并写入写入流,直到不再有数据 结束写流,从而结束读流并

设置:我正在从数据库读取数据,并将数据集作为CSV文件发送电子邮件。数据以500行为单位读取,我使用CSV将记录写入流。然后我想使用电子邮件将文件作为附件发送

选项1(我不想做的事情):
  • 创建临时文件
  • 创建对该文件的写入流
  • 写入所有CSV记录
  • 将所有内容读回内存,并附加到电子邮件中 选项2(我想做但不太知道如何做):
  • 创建一个可写流
  • 创建可读流
  • 以某种方式将写入从(1)传输到(2)
  • 将可写流传递给csv
  • 将可读流传递给mailgun
  • 获取数据并写入写入流,直到不再有数据
  • 结束写流,从而结束读流并发送电子邮件
  • 我一直在读和,问题是我不能使用
    writeable.pipe(可读)

    我曾尝试使用
    双工
    流(即写流和读流都是双工流),但这不起作用,因为双工是一个抽象类,我必须实现几个链接部分


    问题:我如何使用流将CSV记录的写入链接到mailgun的流式附件?

    不要想太多,
    mailgun js
    可以将流作为附件,它可以非常简单:

    var csv = require('csv');
    var mailgun = require('mailgun-js');
    
    // this will stream some csv
    var file = myDbStream.pipe(csv.stringify());
    
    var data = {
        from: 'Excited User <me@samples.mailgun.org>',
        to: 'serobnic@mail.ru',
        subject: 'Hello',
        text: 'Testing some Mailgun awesomness!',
        attachment: file // attach it to your message, mailgun should deal with it
    };
    
    mailgun.messages().send(data, function (error, body) {
        console.log(body);
    });
    
    var csv=require('csv');
    var mailgun=require('mailgun-js');
    //这将流式传输一些csv
    var file=myDbStream.pipe(csv.stringify());
    风险值数据={
    发件人:'兴奋用户',
    致:'serobnic@mail.ru',
    主题:“你好”,
    文字:“测试一些邮枪的威严!”,
    附件:文件//将其附加到您的邮件中,mailgun应该处理它
    };
    mailgun.messages().send(数据、函数(错误、正文){
    控制台日志(主体);
    });
    
    我不知道您的Db是什么,可能驱动程序已经支持流,或者您必须手动输入
    csv
    (可以通过
    事件流
    轻松完成)

    编辑


    ya csv
    似乎无法轻松传送,
    csv
    效果更好。

    这似乎有效,只是我正在使用
    mailgun.Attachment
    创建附件,而我收到的电子邮件没有任何附件。我从流上的
    数据
    事件中记录了数据,数据肯定是正确的,但是电子邮件是通过没有附件的方式发送的。从文档中,他们需要流的
    内容类型
    知识长度
    ,如果附件对象不满足这些有效条件,则会忽略它。