2017-09-24 1 views
0

Ich versuche, verschiedene Arten von Daten aus meiner Datenbank in eine CSV-Datei in Nodejs zu exportieren und auszudrücken. Ich habe bisher mehrere Bibliotheken ausprobiert und nichts scheint so zu funktionieren, wie ich es aus vielen verschiedenen Gründen erwartet habe.Exportieren von Daten in eine CSV-Datei NodejS Express

Wie kann ich das ausarbeiten? Was muss ich wissen, um alle Daten, die ich in eine CSV-Datei aufnehmen möchte, exportieren zu können? und Wie kann ich meinen Browser dazu zwingen? So

Dank

+0

Haben Sie überlegt, den mongoexport-Befehl zu verwenden? https://docs.mongodb.com/manual/reference/program/mongoexport/ – DevKyle

Antwort

0

, nach viel zu kämpfen, werde ich meine Haupt Einsichten teilen, die sind nicht so offensichtlich zu denen, die ihre ersten Schritte in der Web-Entwicklung machen.

Das Exportieren nach CSV kann in zwei Hauptschritte unterteilt werden: 1. Anordnen Ihrer Daten in CSV-Struktur/Modell. 2. Exportieren der Daten/Download auf der Client-Seite.

Also ich werde es aufteilen. Der erste Schritt - Anordnen Ihrer Daten in CSV-Struktur/Modell: Um Ihre Daten in die CSV-Struktur zu bekommen, finden Sie höchstwahrscheinlich eine Bibliothek, die die zu exportierenden Daten in CSV formatiert. Wenn Ihr Datenmodell so komplex ist wie meines, müssen Sie eine benutzerdefinierte Funktion erstellen. So oder so sollte das nicht zu kompliziert sein. ein Beispiel für eine solche Funktion, die ich verwendet:

// The function gets a list of objects ('dataList' arg), each one would be a single row in the future-to-be CSV file 
// The headers to the columns would be sent in an array ('headers' args). It is taken as the second arg 
function dataToCSV(dataList,headers){ 
    var allObjects = []; 
    // Pushing the headers, as the first arr in the 2-dimensional array 'allObjects' would be the first row 
    allObjects.push(headers); 

    //Now iterating through the list and build up an array that contains the data of every object in the list, in the same order of the headers 
    dataList.forEach(function(object){ 
     var arr = []; 
     arr.push(object.id); 
     arr.push(object.term); 
     arr.push(object.Date); 

     // Adding the array as additional element to the 2-dimensional array. It will evantually be converted to a single row 
     allObjects.push(arr) 
    }); 

    // Initializing the output in a new variable 'csvContent' 
    var csvContent = ""; 

    // The code below takes two-dimensional array and converts it to be strctured as CSV 
    // *** It can be taken apart from the function, if all you need is to convert an array to CSV 
    allObjects.forEach(function(infoArray, index){ 
     var dataString = infoArray.join(","); 
     csvContent += index < allObjects.length ? dataString+ "\n" : dataString; 
    }); 

    // Returning the CSV output 
    return csvContent; 
} 

nun der zweite Schritt - Exportieren der Daten: Um die Daten zu exportieren, nach wenigen Möglichkeiten untersuchen, fand ich, dass die bequemste (für Ich sollte die Daten über den HTTP-Header senden und den Browser veranlassen, die Datei herunterzuladen und als CSV-Datei zu parsen. Dass ich mit dem folgenden Code aus:

//this statement tells the browser what type of data is supposed to download and force it to download 
    res.writeHead(200, { 
     'Content-Type': 'text/csv', 
     'Content-Disposition': 'attachment; filename=*custom_name*.csv' 
    }); 
// whereas this part is in charge of telling what data should be parsed and be downloaded 
    res.end(dataToCSV(dataList,["ID","Name","Date"]),"binary"); 

Abschließend ich diesen Beitrag gemacht, damit andere nicht kämpfen wie ich es tat, wenn es um den Export CSV kommt NodeJS mit und auszudrücken. Wenn Sie irgendwelche Fehler finden, oder Sie denken, dass einige der oben geschriebenen sollten gründlicher erklärt werden, lassen Sie es mich bitte wissen, und ich werde die notwendigen Änderungen vornehmen.

Mit freundlichen Grüßen.