Express.js是否支持发送无缓冲逐步刷新的响应?
Perl的Catalyst框架允许您通过打开的连接发送逐渐刷新的响应。 你可以在Catalyst :: Response上使用write_fh()
。 我已经开始使用Node.js了,我无法find相应的方法。
如果我想发送一个大的CSV文件,200 megs的顺序是有办法做到这一点,而不是缓冲整个CSV文件在内存中? 当然,如果你在一定的时间内没有发送数据,客户端将会超时,所以如果你有这样的承诺,那么这个承诺会很好吗?
当我尝试在callback中执行res.send(text)
时,我得到了
Express 500 Error: This socket has been ended by the other party
而且,Express.js似乎并不支持显式的socket.close()
或其他类似的东西。
这里是一个例子,
exports.foo = function (res) { var query = client.query("SELECT * FROM naics.codes"); query.on('row', function(row) { //console.log(row); res.write("GOT A ROW"); }); query.on('end', function() { res.end(); client.end(); }); };
我希望为每行发送“GOT A ROW”,直到对client.end()
的调用表示完成。
Expressbuild立在本地HTTP模块上,这意味着res
是http.ServerResponse
一个实例,它从可写入stream接口inheritance。 这就是说,你可以这样做:
app.get('/', function(req, res) { var stream = fs.createReadStream('./file.csv'); stream.pipe(res); // or use event handlers stream.on('data', function(data) { res.write(data); }); stream.on('end', function() { res.end(); }); });
您不能在Express中使用res.send()
方法的原因是因为它会自动为您使用res.close()
。