Perl的Catalyst框架允许您通过打开的连接发送逐步刷新的响应。例如,您可以在Catalyst::Response上使用write_fh()
。我已经开始使用Node. js,但我找不到如何做到这一点。
如果我想发送一个大的CSV文件,大约200兆,有没有办法在不缓冲内存中的整个CSV文件的情况下做到这一点?诚然,如果您在一定时间内没有发送数据,客户端将超时,所以一个promise会很好,如果-但是无论如何都要这样做吗?
当我尝试在回调中执行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();
});
};
我希望为每一行发送“有一行”,直到调用client. end()
表示完成。
Express建立在原生HTTP模块之上,这意味着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();
});
});
您不能将Express中的res. send()
方法用于流的原因是它会自动为您使用res.close()
。