【发布时间】:2013-09-22 08:30:42
【问题描述】:
Perl 的 Catalyst 框架允许您通过打开的连接发送逐渐刷新的响应。例如,您可以使用write_fh() on Catalyst::Response。我已经开始使用 Node.js,但我找不到等效的方法。
如果我想发送一个大的 CSV 文件,大约 200 兆,有没有办法做到这一点,而无需在内存中缓冲整个 CSV 文件?诚然,如果您在一定时间内不发送数据,客户端将超时,所以如果 - 承诺会很好 - 但无论如何可以这样做吗?
当我尝试在回调中执行 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() 表示完成。
【问题讨论】:
-
你是如何使用导出的?您从该导出中获得了什么结果?
-
Export 位于由路由调用的模型中。好像它没有得到我发送给 foo() 的 res 的副本,不知道是线程错误还是下面的什么。
-
将
exports.foo从function(res)更改为function(req, res)。您传递的是请求而不是响应。 -
@hexacyanide 没有区别,我只是从路线发送它。这段代码来自我保存 SQL 的数据库接口。我实际上什至不喜欢发送它
res,但我这样做是出于必要。