gpt4 book ai didi

node.js - Express.js 是否支持发送无缓冲的渐进式刷新响应?

转载 作者:IT老高 更新时间:2023-10-28 23:03:51 27 4
gpt4 key购买 nike

Perl 的 Catalyst 框架允许您通过打开的连接发送逐渐刷新的响应。例如,您可以使用 write_fh() on Catalyst::Response .我已经开始使用 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();
});
};

我希望它会为每一行发送“GOT A ROW”,直到调用 client.end() 表示完成。

最佳答案

Express 建立在原生 HTTP 模块之上,这意味着 reshttp.ServerResponse 的一个实例,它继承自 writable stream界面。也就是说,您可以这样做:

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

关于node.js - Express.js 是否支持发送无缓冲的渐进式刷新响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18857693/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com