2017-01-11 104 views
2

我正在使用json2csv節點模塊生成一個CSV文件,其中我的數據編寫得很好。 這是我的代碼,用我的數據創建一個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);

但它不工作...

請讓我知道我能做到這一點。

感謝

回答

3

如果您使用的快遞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 
        } 
       }); 
       } 

      }); 
+0

它不工作..沒有任何控制檯錯誤顯示 –

+0

我認爲,沒有任何中間件在app.js發生衝突,有可能????????????????????? ? –

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 
     } 
    }); 
    } 
}); 

這個替換您的代碼。

+0

即使'res.donwload(path)'也不能正常工作.....並且沒有任何控制檯錯誤顯示 –

+0

我想,app.js中是否存在任何中間件衝突,這是可能的?????????????????????? –

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();

現在,它的做工精細click事件。

謝謝你們的幫助。