2016-08-09 57 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

无论如何,如果可以按行进行处理而不是完整的文件块,那么通过不阻止它可以更好地实现事件循环。 –