2016-08-09 18 views
0

Ich arbeite an einem Knotenprojekt, mit dem Benutzer CSV-Dateien hochladen können, die dann möglicherweise zu einer Mongo-Datenbank hinzugefügt werden. Ich habe es funktioniert mit einem anderen Modul, aber mit großen Dateien, wird es zu Ende lesen und den Benutzer umleiten, bevor alle Daten verarbeitet wurden. Ich denke, versprochen - CSV wird dabei helfen, aber ich habe Probleme herauszufinden, wie man das aufstellt. Dies ist das aktuelle Setup:Verwenden von versprochenen CSV zum Bearbeiten sehr großer CSV-Dateien

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('/'); 
     }) 
    }) 
}); 

Antwort

0

Zuerst haben Sie nicht erwähnt, in welchem ​​Bereich die CSV-Dateien sind? Aus Ihrem Code sehe ich, dass die Dateiverarbeitung im selben Request-Handler erfolgt, wie Sie die Datei hochladen. Abhängig von der Dateigröße, wenn sie größer als 5 MB ist, schlage ich vor, eine Art Batch-Arbeiter zu verwenden, um die Dateiverarbeitung durchzuführen. Fügen Sie eine zusätzliche Protokollierung hinzu, um zu sehen, wie lange das Einfügen dauert, und wie lange es dauert, bevor es beendet wird.

Werfen Sie einen Blick auf Post über gute Knoten CSV-Bibliothek Stream-basierte NodeJs reading csv file.

+0

Ich denke, ich sollte besser klären. Die Dateigröße der CSV-Datei ist nicht sehr groß, enthält jedoch viele Zeilen mit nur etwa 8 Informationsspalten. Ich würde sagen, mit Testdateien, die mehr als 2000 Zeilen enthalten, habe ich die Probleme festgestellt. – user3307654

+0

Wie auch immer, wenn es möglich ist, die Verarbeitung nach Zeilen anstatt nach ganzen Dateien zu machen, ist es besser für die Ereignisschleife, indem sie nicht blockiert wird. –

Verwandte Themen