如何使用json2csv创建后下载CSV文件

时间:2017-01-11 07:29:27

标签: node.js csv download

我正在使用json2csv节点模块生成一个CSV文件,其中我的数据写得非常好。 这是我用我的数据创建csv文件的代码。

 Lead.find({ownerId:owner._id}, function(err, data){
                if(err){res.json(err)}
                  else{
                    res.json(data);  
                      var fields = ['lead', 'salutation', 'fname','lname','title','email','mobile','rating','address','city','state','zcode','company','industry','empSize','lsource'];
                      var csv = json2csv({ data: data, fields: fields });
                      var path='./public/csv/file'+Date.now()+'.csv'; 
                       fs.writeFile(path, csv, function(err,data) {
                        if (err) {throw err;}
                        else{ 
                          console.log('file Created');
                         //I need to download above creating csv file here
                        }
                    }); 
                  }

              });

所以,现在我想知道如何在生成csv后下载创建的CSV文件。 我试过了res.setHeader('Content-disposition', 'attachment; filename=data.csv'); res.set('Content-Type', 'text/csv'); res.status(200).send(data);

但它不起作用......

请让我知道我该怎么做。

由于

3 个答案:

答案 0 :(得分:3)

如果您使用快递4.x,则可以使用cleartool merge

cut

答案 1 :(得分:1)

json2csv({ data: myCars, fields: fields }, function(err, csv) {
    if(err) {
        throw err;
    } else {
        var path='./csv'+Date.now()+'.csv'; 
        fs.writeFile(path, csv, function(err,data) {
         if (err) {throw err;}
         else{ 
           console.log('file Created');
           res.setHeader('Content-disposition', 'attachment; filename=data.csv');
           res.set('Content-Type', 'text/csv');
           res.status(200).send(csv);
          //I need to download above creating csv file here
         }
     }); 
    }
});

用此替换您的代码。

答案 2 :(得分:1)

尝试了所有这些......我得到了一个解决方案。 在Node.js的后端,API res.download(path)运行正常。 在正面我使用Angular.js。因此,为了使其可行,我需要创建一个锚标记并触发像这样的点击事件

var anchor=angular.element('<a/>'); anchor.attr({href:'data:attachment/csv;charset=utf-8,' + encodeURI($scope.dattaa),target:'_blank',download:'lead'+Date.now()+'.csv'})[0].click();

现在工作正常。

谢谢大家的帮助。