2016-08-05 15 views
2

Ich habe versucht, eine Express-App zu erhalten, um die Antwort als Stream zu senden.Wie streame ich Antwort in Express

var Readable = require('stream').Readable; 
var rs = Readable(); 


app.get('/report', function(req,res) { 

    res.statusCode = 200; 
    res.setHeader('Content-type', 'application/csv'); 
    res.setHeader('Access-Control-Allow-Origin', '*'); 

    // Header to force download 
    res.setHeader('Content-disposition', 'attachment; filename=Report.csv'); 


    rs.pipe(res); 

    rs.push("USERID,NAME,FBID,ACCOUNT,SUBSCRIPTION,PRICE,STATE,TIMEPERIOD\n"); 

    for (var i = 0; i < 10; i++) { 
     rs.push("23,John Doe,1234,500,SUBSCRIPITON,100,ACTIVE,30\n"); 
    } 

    rs.push(null); 
});  

Es tut Druck in der Konsole, wenn i "rs.pipe (res)" durch "rs.pipe (process.stdout)" ersetzen, sondern wie man es in Express App funktioniert.

Error: not implemented 
    at Readable._read (_stream_readable.js:465:22) 
    at Readable.read (_stream_readable.js:341:10) 
    at Readable.on (_stream_readable.js:720:14) 
    at Readable.pipe (_stream_readable.js:575:10) 
    at line "rs.pipe(res);" 
+0

Sie müssen die Klasse ['Readable'] (https://nodejs.org/api/stream.html#stream_implementing_a_readable_stream) ableiten, die eine Methode' _read' haben muss. Aber warum nicht einfach 'res.write (...)' benutzen? – robertklep

+0

Wie würde ich res.write() hier verwenden? –

Antwort

4

Sie brauchen keinen lesbaren Stream-Instanz benötigen, verwenden Sie nur res.write():

res.write("USERID,NAME,FBID,ACCOUNT,SUBSCRIPTION,PRICE,STATE,TIMEPERIOD\n"); 

for (var i = 0; i < 10; i++) { 
    res.write("23,John Doe,1234,500,SUBSCRIPITON,100,ACTIVE,30\n"); 
} 

res.end(); 

Das funktioniert, weil in Express, res auf Knoten eigenen http.serverResponse basiert, so dass es alle seine Methoden erbt (wie write).

+0

Wird dies immer noch kein Problem sein, wenn ich der Antwort Tausende von Zeilen hinzufüge? –

+0

Nein, weil 'res' auch ein Stream ist. – robertklep

+0

Danke. Ich habe den ganzen Tag mit dem lesbaren Stream versucht. –

Verwandte Themen