Node.js 如何从Node/Express REST端点流式传输结果,但返回的每个文档都有延迟?
有点背景,我来自Java背景,我已经解决了这个问题。然而,我正试图为同样的问题转换到Node/Express/Mongoose 总之,我有一个REST端点来获取按日期排序的事件(会议、聚会等)列表。但是,我希望从Mongo数据库中一次传输一个JSON文档,延迟100ms 现在,我的代码将所有事件作为一个结果返回,而不是将它们分割成单独的文档并一次一个地流式处理 我们使用Angular和EventSource()作为客户端。我知道我的Angular代码可以工作,因为我的Java后端代码一切都很好 以下是我目前拥有的:Node.js 如何从Node/Express REST端点流式传输结果,但返回的每个文档都有延迟?,node.js,mongodb,express,mongoose,server-sent-events,Node.js,Mongodb,Express,Mongoose,Server Sent Events,有点背景,我来自Java背景,我已经解决了这个问题。然而,我正试图为同样的问题转换到Node/Express/Mongoose 总之,我有一个REST端点来获取按日期排序的事件(会议、聚会等)列表。但是,我希望从Mongo数据库中一次传输一个JSON文档,延迟100ms 现在,我的代码将所有事件作为一个结果返回,而不是将它们分割成单独的文档并一次一个地流式处理 我们使用Angular和EventSource()作为客户端。我知道我的Angular代码可以工作,因为我的Java后端代码一切都很好
app.get('/events', (req, res) => {
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
Event.find({}).sort({ date:1 }).then(events => {
console.log(events);
res.write(JSON.stringify(events) + '\n');
}).catch(err => {
res.status(500).send({
message: err.message
});
});
});
我也试过:
var stream = Event.find({}).sort({ date: 1 }).stream();
stream.on('data', function(doc) {
//console.log(doc);
res.write(JSON.stringify(doc));
});
stream.on('end', function() {
res.end();
});
这是:
var cursor = Event.find().sort({ date: 1}).cursor();
cursor.on('data', function(doc) {
res.write(JSON.stringify(doc));
});
cursor.on('close', function() {
res.end();
});
我希望答案会很简单,但由于我在Node的新手天性,我甚至不确定我在寻找什么。任何帮助都会很好
谢谢。您没有在后面添加任何延迟。你一次就把它们都寄出去了。在mongoose中寻找“游标”。@JorgeFuentesGonzález嘿Jorge,是的,我想是这样的,但我不确定如何在节点中进行延迟,以及它的确切位置。在上面的第三个代码示例中,我使用了游标,但我不知道延迟代码去了哪里,甚至不知道它是什么样子。有什么想法或联系吗?谢谢。我不习惯mongoose,但你要做的是让一个项目(光标->下一个或类似的东西)发送它,用
setTimeout()
等待一段时间,然后用光标->下一个东西再次发送下一个项目。光标类似于“动态接收项目”,通常您可以在需要时请求下一个项目。