Ich versuche, PDF-Dateien von Remote-Servern und Rohr sie gleich wieder an die anfordernden Clients wie unten zu holen:Node.JS Readstream schließt unerwartet vor Writestream
var writeStream = fs.createWriteStream(filename);
writeStream.on('close', function() {
console.log("Closed write stream");
});
writeStream.on('open', function() {
console.log('Open event for writestream');
});
writeStream.on('pipe', function() {
console.log('pipe event for writestream');
var rd = fs.createReadStream(filename);
rd.on('open', function() {
console.log('Open event for readstream');
});
rd.on('close', function() {
console.log("Closed read stream");
}).pipe(res);
});
request(pQuestURL)
.on('error', function (err) {
console.log(err);
res.json({ status: -1, message: 'Maps error, check your parameters' });
})
.pipe(writeStream);
Aber es gibt mir eine Ausgabe wie folgt:
pipe event for writestream
Open event for writestream
Open event for readstream
Closed read stream
Closed write stream
ich erwarte die readstream
nur Finish nach den writestream
beendet hat. Die readstream
scheint sofort zu schließen und daher erhält mein Client eine leere Antwort, während der Schreibstream erst nach dem Herunterladen der gesamten PDF beendet wird. Gibt es ein Loch in meinem Verständnis? Wie kann ich direkt zurück pipen, ohne auf das finish
Ereignis der writestream
zu warten?
Edit:
Eigentlich kann ich den lesbaren Stream in einer Variablen und Rohr es so viele beschreibbaren Ströme speichern, wie ich will. Ich erreichte mein Ziel durch die als Vereinfachung:
var mapRequest = request(pQuestURL);
mapRequest.on('error', function (err) {
console.log(err);
res.json({ status: -1, message: 'Maps error, check your parameters' });
});
mapRequest.pipe(writeStream);
mapRequest.pipe(res);
warum brauchst du einen writeStream? Kannst du nur anfordern (pQuestURL) .pipe (res); ??? Sieht so aus, als wäre Ihr readStream schneller als writeStream, da der writeStream von der Downloadgeschwindigkeit abhängt ... –
Sie haben Recht. Ich kann den lesbaren Stream in einer Variablen speichern und ihn so vielen schreibbaren Daten zuführen, wie ich möchte. Meine Frage jetzt bearbeiten. Danke – user3677331
und es ist nicht notwendig, die Datei auf Ihrem Server zu speichern. es wird nur Ressourcen verschwenden ... –