Ich bin vertraut mit Node-Streams, aber ich habe Probleme mit Best Practices für die Abstraktion von Code, die ich oft in einem einzigen Pipe-Schritt wiederverwende.Knoten - Abstrahieren von Pipe-Schritten in Funktion
Hier ist eine abgespeckte Version von dem, was ich heute schreibe:
inputStream
.pipe(csv.parse({columns:true})
.pipe(csv.transform(function(row) {return transform(row); }))
.pipe(csv.stringify({header: true})
.pipe(outputStream);
Die eigentliche Arbeit geschieht in transform()
. Die einzigen Dinge, die sich wirklich ändern, sind inputStream
, transform()
und outputStream
. Wie ich schon sagte, das ist eine abgespeckte Version dessen, was ich tatsächlich benutze. Ich habe eine Menge Fehlerbehandlung und Protokollierung bei jedem Pipe-Schritt, weshalb ich letztendlich versuche, den Code zu abstrahieren.
Was ich suche zu schreiben, ist ein einzelnes Rohr Schritt, etwa so:
inputStream
.pipe(csvFunction(transform(row)))
.pipe(outputStream);
Was ich kämpfen, zu verstehen, wie diese Rohr Schritte in eine einzige Funktion zu aktivieren, die einen Strom übernimmt und gibt einen Stream zurück. Ich habe Bibliotheken wie through2 angeschaut, aber ich bin mir nicht sicher, wie ich dorthin komme, wo ich hin will.
Wie würde ich die Transform (Zeilen) -Referenz in den Stream übergeben? Wäre es nicht besser, einen Transformations-Stream zu verwenden? Ich habe gelesen, dass PassThrough mehr für die Überwachung eines Streams als tatsächlich Arbeit daran ist? – AdamPat
Hängt davon ab, wie Sie Ihr Stream-Handling packen. Stellen Sie die Funktion einfach an einen Ort, an dem sie sichtbar ist, oder geben Sie sie als Referenz ein. Und natürlich können Sie Ihre Lösung in einem Transform-Stream implementieren (schauen Sie hier https://nodejs.org/api/stream.html#stream_implementing_a_transform_stream). Die Idee mit einem PassThrough-Stream zu zeigen, war einfach der einfachste Weg, den ich gefunden habe. – Marc