2016-08-05 8 views
2

私は応答をストリームとして送るためにエクスプレスアプリを手に入れようとしています。私は「rs.pipe(process.stdout)」による「rs.pipe(RES)」を交換するとき私はどのように応答を流すのですか

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

それはコンソールで印刷を行いますが、どのようにそれが明示アプリで動作するようにします。

あなただけ res.write()を使用し、読み込み可能なストリームのインスタンスを必要としない
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

[readable'](https://nodejs.org/api/stream.html#stream_implementing_a_readable_stream)をサブクラス化する必要があります。このメソッドには '_read'メソッドが必要です。しかし、単に 'res.write(...)'を使わないのはなぜですか? – robertklep

+0

ここでres.write()を使う方法は? –

答えて

4

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

エクスプレス、resにノード自身http.serverResponseに基づいて、それはすべてのメソッド(などを継承しているので、これは動作しますwrite)。

+0

応答に何千もの行を追加してもこれは問題にはなりませんか? –

+0

いいえ、 'res'もストリームなので。 – robertklep

+0

ありがとうございます。私は終日読めるストリームでそれをやろうとしていました。 –

関連する問題