Node.js 平均角度4堆栈将csv文件从服务器下载到客户端

Node.js 平均角度4堆栈将csv文件从服务器下载到客户端,node.js,angular,express,mean-stack,Node.js,Angular,Express,Mean Stack,这是我在Angular 4项目中调用的NodeJs POST函数 var generateReport = function(req, res){ const Json2csvParser = require('json2csv').Parser; connection((db) => { const fields = ['Gender', 'Name', 'Email']; myReport = []; db.c

这是我在Angular 4项目中调用的
NodeJs POST
函数

var generateReport = function(req, res){
    const Json2csvParser = require('json2csv').Parser;
    connection((db) => {
          const fields = ['Gender', 'Name', 'Email'];
          myReport = [];
          db.collection('members_'+req.user._id).find()
          .toArray()
          .then(function(members){
            members.forEach(member => {
                db.collection('plans_'+req.user._id).findOne()
                .then(function(plan){
                    this.myReport.push({
                        "Gender" : member.gender,
                        "Name" : member.name,
                        "Email" : member.email
                    })
                    const json2csvParser = new Json2csvParser({ fields });
                    const csv = json2csvParser.parse(myReport);
                    var fs = require('fs');
                    res.status(200).send(new Buffer(csv));
                    /*fs.writeFile('csv.csv', csv, function (err) {
                      if (err) throw err;
                      res.download('csv.csv');
                    });*/
                })
                .catch(function(err){
                    console.log(err);
                })
            })
          }) 
    });
}
我得到的错误是:

 Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
 at validateHeader (_http_outgoing.js:503:11)
 at ServerResponse.setHeader (_http_outgoing.js:510:3)
 at ServerResponse.header (/home/ubuntu/alpeshvasani/server/node_modules/expr                                                                               ess/lib/response.js:767:10)
 at ServerResponse.send (/home/ubuntu/alpeshvasani/server/node_modules/expres                                                                             s/lib/response.js:194:10)
 at /home/ubuntu/alpeshvasani/server/controllers/data-controller.js:1959:22
 at <anonymous>
 at process._tickCallback (internal/process/next_tick.js:160:7)
 Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the cli                                                                             ent
 at validateHeader (_http_outgoing.js:503:11)
 at ServerResponse.setHeader (_http_outgoing.js:510:3)
 at ServerResponse.header (/home/ubuntu/alpeshvasani/server/node_modules/expr                                                                             ess/lib/response.js:767:10)
 at ServerResponse.send (/home/ubuntu/alpeshvasani/server/node_modules/expres                                                                             s/lib/response.js:194:10)
 at /home/ubuntu/alpeshvasani/server/controllers/data-controller.js:1959:22
 at <anonymous>
 at process._tickCallback (internal/process/next_tick.js:160:7)
 Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the cli                                                                             ent
 at validateHeader (_http_outgoing.js:503:11)
 at ServerResponse.setHeader (_http_outgoing.js:510:3)
 at ServerResponse.header (/home/ubuntu/alpeshvasani/server/node_modules/expr                                                                             ess/lib/response.js:767:10)
 at ServerResponse.send (/home/ubuntu/alpeshvasani/server/node_modules/expres                                                                             s/lib/response.js:194:10)
 at /home/ubuntu/alpeshvasani/server/controllers/data-controller.js:1959:22 at <anonymous>
 at process._tickCallback (internal/process/next_tick.js:160:7)
Error[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头
在validateHeader(_http_outgoing.js:503:11)
在ServerResponse.setHeader(_http_outgoing.js:510:3)
在ServerResponse.header(/home/ubuntu/alpeshvasani/server/node_modules/expr ess/lib/response.js:767:10)
在ServerResponse.send(/home/ubuntu/alpeshvasani/server/node_modules/expres s/lib/response.js:194:10)
在/home/ubuntu/alpeshvasani/server/controllers/data controller.js:1959:22
在
在进程中。_tick回调(内部/process/next_tick.js:160:7)
错误[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头
在validateHeader(_http_outgoing.js:503:11)
在ServerResponse.setHeader(_http_outgoing.js:510:3)
在ServerResponse.header(/home/ubuntu/alpeshvasani/server/node_modules/expr ess/lib/response.js:767:10)
在ServerResponse.send(/home/ubuntu/alpeshvasani/server/node_modules/expres s/lib/response.js:194:10)
在/home/ubuntu/alpeshvasani/server/controllers/data controller.js:1959:22
在
在进程中。_tick回调(内部/process/next_tick.js:160:7)
错误[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头
在validateHeader(_http_outgoing.js:503:11)
在ServerResponse.setHeader(_http_outgoing.js:510:3)
在ServerResponse.header(/home/ubuntu/alpeshvasani/server/node_modules/expr ess/lib/response.js:767:10)
在ServerResponse.send(/home/ubuntu/alpeshvasani/server/node_modules/expres s/lib/response.js:194:10)
at/home/ubuntu/alpeshvasani/server/controllers/data controller.js:1959:22 at
在进程中。_tick回调(内部/process/next_tick.js:160:7)

我尝试了其他发送csv的方法,但在角度方面失败了。。它发送的
httperror
无法解析json,因为它默认以json形式接收响应。所以我把它改成了
{responseType:'text'}
,但运气不好。

在函数参数和res.status(200.send)之后使用next(新缓冲区(csv));put return next()仍然是相同的错误。错误“error:发送邮件后无法设置邮件头。”表示您已经处于正文或完成状态,但某些函数试图设置邮件头或状态代码。当您看到此错误时,请尝试查找在某些正文已写入之后尝试发送标头的任何内容。例如,查找意外调用两次的回调,或在正文发送后发生的任何错误Postman工作正常但与angular 4相同以上错误我认为每个循环都有问题,尝试每次发送res不可能,您必须发送一次res。send(),仅出于测试目的,您可以在不使用循环的情况下检查一个值