2017-05-14 4 views
0

I Stream bin Tests Dateien hoch- und herunterladen, unter meine wirklich einfache Datei-Download-Route ist, dass meine komprimierte Datei entpacken und per Stream senden:Knoten Strom nach Ende Schreibfehler erhalten

app.get('/file', (req, res) => { 
    fs.createReadStream('./upload/compress_aurelien-boquet.pdf') 
     .pipe(unzip) 
     .pipe(res); 
}); 

Ich bin mit Express 4.15.2 BTW.

Wenn ich versuche, diesen Weg es in Ordnung das erste Mal funktioniert und zeigt mir das pdf in meinem Browser, aber wenn ich die Seite dann mein Server erhält diesen Fehler zu aktualisieren:

events.js:163 
     throw er; // Unhandled 'error' event 
    ^

Error: write after end 
    at writeAfterEnd (_stream_writable.js:191:12) 
    at Unzip.Writable.write (_stream_writable.js:238:5) 
    at ReadStream.ondata (_stream_readable.js:557:20) 
    at emitOne (events.js:96:13) 
    at ReadStream.emit (events.js:191:7) 
    at readableAddChunk (_stream_readable.js:178:18) 
    at ReadStream.Readable.push (_stream_readable.js:136:10) 
    at onread (fs.js:1938:12) 
    at FSReqWrap.wrapper [as oncomplete] (fs.js:629:17) 

Ich weiß möchte, was geht es weiter?

Antwort

0

Meine schlechte, war mit zlib Bibliothek zu gzip und entpacken Datei, aber ich habe vergessen, dass "zlib.createGzip" und "zlib.createUnzip" einen Stream zurückgeben, so dass ich einen bereits beendeten Stream wiederverwendet mich den 'nach Ende Fehler schreiben ".

Die schlechte, was ich tat:

const unzip = zlib.createUnzip(); 

app.get('/file', (req, res) => { 
    fs.createReadStream('./upload/compress_aurelien-boquet.pdf') 
     .pipe(unzip) 
     .pipe(res); 
}); 

Die gute Sache zu tun:

app.get('/file', (req, res) => { 

    fs.createReadStream('./upload/compress_aurelien-boquet.pdf') 
     .pipe(zlib.createGunzip()) 
     .pipe(res); 

});