Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从Node/Express REST端点流式传输结果,但返回的每个文档都有延迟?_Node.js_Mongodb_Express_Mongoose_Server Sent Events - Fatal编程技术网

Node.js 如何从Node/Express REST端点流式传输结果,但返回的每个文档都有延迟?

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后端代码一切都很好

有点背景,我来自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()
等待一段时间,然后用光标->下一个东西再次发送下一个项目。光标类似于“动态接收项目”,通常您可以在需要时请求下一个项目。