/ / pipe Streams zum Bearbeiten der CSV-Datei in node.js - node.js, csv, stream

Pipe-Streams zum Bearbeiten der CSV-Datei in node.js - node.js, csv, stream

Ich versuche im Grunde:

  • Öffnen Sie eine CSV-Datei als Stream
  • Machen Sie etwas Operation auf jeder Linie
  • streamen Sie das Ergebnis in eine zweite CSV-Datei

in node.js.

Hier ist mein Code:

var fs = require("fs");
var csv = require("csv");

var readStream = fs.createReadStream("input.csv");
var writeStream = fs.createWriteStream("output.csv");

var csvStream = csv
.parse()
.on("data", function(data){
//do some stuff with data
return(JSON.stringify(data));
})
.on("end", function(){
console.log("done");
})
.on("error", function(error){
console.log(error)
});

(readStream.pipe(csvStream)).pipe(writeStream);

Ich bekomme "TypeError: Ungültiger Nicht-String / Puffer-Chunk". Was mache ich falsch ? Ich bin total neu bei node.js, bitte geben Sie Ihre Antwort an.

Antworten:

1 für die Antwort № 1

Sie lesen die Daten korrekt. Jedoch verwenden return ist nicht der richtige Weg, um Ihre Daten zu transformieren. CSV Stream kann nicht untransformierte Daten (die Sie gerade in Ihrem data Event-Handler) und transformierte Daten, die Sie pipen würden writeStream.

Benutzen pipe Mit writeStream hätten Sie einen lesbaren Stream benötigt, der Ihre transformierten Daten ausgibt. Das hätte bedeutet, dass Sie einen Lese- / Schreib-Stream um Ihre Transformationsfunktion und Piping erstellen müssten fileReader > csvReader > transformStream > writeStream. Es ist viel einfacher, eine Funktion an die anzuhängen data Ereignis des CSV-Readers wie Sie, aber Sie müssen manuell in die Datei schreiben.

Der korrekte Code-Code könnte auf diese Weise klarer sein:

var fs = require("fs");
var csv = require("csv");

var readStream = fs.createReadStream("input.csv"); // readStream is a read-only stream wit raw text content of the CSV file
var writeStream = fs.createWriteStream("output.csv"); // writeStream is a write-only stream to write on the disk

var csvStream = csv.parse(); // csv Stream is a read and write stream : it reads raw text in CSV and output untransformed records

csvStream.on("data", function(data) {
//console.log(data)

writeStream.write(JSON.stringify(data));
})
.on("end", function(){
console.log("done");
})
.on("error", function(error){
console.log(error)
});

readStream.pipe(csvStream)