如何在 express 中流式传输响应? [英] How do I stream response in express?
本文介绍了如何在 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');
rs.pipe(res);
rs.push("USERID,NAME,FBID,ACCOUNT,SUBSCRIPTION,PRICE,STATE,TIMEPERIOD
");
for (var i = 0; i < 10; i++) {
rs.push("23,John Doe,1234,500,SUBSCRIPITON,100,ACTIVE,30
");
}
rs.push(null);
});
当我替换rs.pipe(res)"时,它确实会在控制台中打印出来通过rs.pipe(process.stdout)".但是如何让它在一个 express 应用中工作呢?
It does print in the console when I replace "rs.pipe(res)" by "rs.pipe(process.stdout)". But how to make it work in an express app?
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);"
推荐答案
你不需要可读的流实例,只需使用res.write()
:
You don't need a readable stream instance, just use res.write()
:
res.write("USERID,NAME,FBID,ACCOUNT,SUBSCRIPTION,PRICE,STATE,TIMEPERIOD
");
for (var i = 0; i < 10; i++) {
res.write("23,John Doe,1234,500,SUBSCRIPITON,100,ACTIVE,30
");
}
res.end();
这是可行的,因为在 Express 中,res
基于 Node 自己的 http.serverResponse
,所以它继承了它的所有方法(比如 <代码>写).
This works because in Express, res
is based on Node's own http.serverResponse
, so it inherits all its methods (like write
).
这篇关于如何在 express 中流式传输响应?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文