2016-08-09 58 views
0

我正在研究一個節點項目,它使用戶能夠上傳.csv文件,然後將其添加到mongo數據庫中。我使用不同的模塊工作,但使用大文件時,它會在所有數據處理完之前完成讀取和重定向用戶。我認爲promised-csv會幫助解決這個問題,但是我很難弄清楚如何設置它。這是目前的設置:使用promised-csv來處理非常大的csv文件

app.post('/import', isLoggedIn, function(req, res) { 
    var reader = csv.createCsvFileReader(req.files.spreadsheet.path, {columnsFromHeader:true, 'separator': ','}); 
    reader.addListener('data', function(data) { 
     //do stuff with data here. 
    }) 
    reader.addListener('end', function(){ 
     fs.unlink(req.files.spreadsheet.path, function(err) { 
      res.redirect('/'); 
     }) 
    }) 
}); 

回答

0

首先你還沒有提到在CSV文件的範圍是什麼?從你的代碼中,我發現文件處理是在你上傳文件的同一請求處理程序中完成的。根據5MB以上的文件大小,我建議使用某種批處理工來完成文件處理。添加額外的日誌記錄以查看插入花費多長時間的時間,它在完成之前是否收到超時。

看看關於基於NodeJs reading csv file的好節點CSV庫流的文章。

+0

我想我應該澄清更好。 CSV的文件大小並不是很大,但它包含大量只包含約8列信息的行。我會說包含2000多行的測試文件是我遇到問題的地方。 – user3307654

+0

無論如何,如果可以按行進行處理而不是完整的文件塊,那麼通過不阻止它可以更好地實現事件循環。 –