2016-08-09 7 views
0

Я работаю над проектом узла, который позволяет пользователям загружать файлы .csv, которые затем могут быть добавлены в базу данных mongo. У меня есть работа с другим модулем, но с большими файлами он завершит чтение и перенаправление пользователя до того, как все данные будут обработаны. Я думаю, что обещанный-csv поможет в этом, но мне трудно понять, как это установить. Это текущая настройка:Использование обещанного-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-файлы? Из вашего кода я вижу, что обработка файлов выполняется в том же обработчике запросов, когда вы загружаете файл. В зависимости от размера файла, если его более 5 МБ, я предлагаю использовать какой-то пакетный рабочий для обработки файлов. Добавьте дополнительную регистрацию, чтобы узнать, каковы временные интервалы времени, в течение которого вставка требует времени, получает ли он таймаут до его завершения.

Взгляните на сообщение о хорошем потоке библиотеки CSV на основе NodeJs reading csv file.

+0

Я думаю, что я должен уточнить лучше. Размер файла CSV не очень большой, но он содержит много строк только около 8 столбцов информации. Я бы сказал, что с тестовыми файлами, содержащими более 2000 строк, я столкнулся с проблемами. – user3307654

+0

В любом случае, если можно выполнить обработку по строке вместо полного фрагмента файла, лучше для цикла событий не заблокировать его. –