Perl的Catalyst框架允许您通过打开的连接发送逐渐刷新的响应。例如,您可以write_fh()在Catalyst :: Response上使用。我已经开始使用Node.js,但找不到等效的方法。
write_fh()
如果我要发送一个较大的CSV文件,是否可以在不将整个CSV文件缓存在内存中的情况下实现200兆的数量级?当然,如果您在一定时间内不发送数据,客户端将超时,因此,如果- 但有什么办法做到这一点,诺言将是不错的选择?
当我尝试res.send(text)在回调中执行a 时,我得到
res.send(text)
Express 500 Error: This socket has been ended by the other party
而且,似乎Express.js不支持显式的socket.close()或类似的东西。
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()完成为止。
client.end()
Express基于本机HTTP模块构建,这意味着它res是的实例http.ServerResponse,它是从可写流接口继承的。也就是说,您可以执行以下操作:
res
http.ServerResponse
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(); }); });
您无法res.send()在Express 中将方法用于流的原因是因为它将res.close()自动为您使用。
res.send()
res.close()