【问题标题】:How to download CSV file after creating using json2csv使用 json2csv 创建后如何下载 CSV 文件
【发布时间】:2017-05-25 21:35:58
【问题描述】:

我正在生成一个 CSV 文件,其中我的数据使用 json2csv 节点模块写入得非常好。 这是我用我的数据创建 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);

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

请告诉我该怎么做。

谢谢

【问题讨论】:

    标签: node.js csv download


    【解决方案1】:

    如果您使用的是 express 4.x,您可以简单地使用 res.download()

     Lead.find({ownerId:owner._id}, function(err, data){
                if(err){res.json(err)}
                  else{
                      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{ 
                          res.download(path); // This is what you need
                        }
                    }); 
                  }
    
              });
    

    【讨论】:

    • 我想,app.js里面有没有中间件冲突,有可能??????????????????????
    【解决方案2】:
    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
             }
         }); 
        }
    });
    

    用这个替换你的代码。

    【讨论】:

    • 它不工作,即使res.donwload(path) 也不工作.....并且没有任何控制台错误显示
    • 我想,app.js里面有没有中间件冲突,有可能??????????????????????
    【解决方案3】:

    在尝试了所有这些之后.....我得到了解决方案。 在 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();

    现在它工作正常。

    谢谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多