Amit Adhikari Amit Adhikari - 10 months ago 33
Javascript Question

How do i stream response in express

I've been trying to get a express app to send the response as stream.

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');



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


It does print in the console when i replace "rs.pipe(res)" by "rs.pipe(process.stdout)" but how to make it work in express app.

Error: not implemented
at Readable._read (_stream_readable.js:465:22)
at (_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);"


You don't need a readable stream instance, just use res.write():


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


This works because in Express, res is based on Node's own http.serverResponse, so it inherits all its methods (like write).