【问题标题】:Streaming large amount of data directly from mongodb query into nodejs response将大量数据直接从 mongodb 查询流式传输到 nodejs 响应中
【发布时间】:2021-12-30 11:42:48
【问题描述】:

我正在构建 MERN 堆栈应用程序,有一次我需要从 mongodb 数据库中获取大量数据,所以我遇到了 mongodb 流,我想知道实现这一点的最佳方法是什么。我已经尝试了这两个选项:

  var stream = Product.find({}).stream();

    stream.on('error', (err) => {
        console.error(err)
    });

    stream.on('data', (doc) => {
        return res.json(doc);
    });

在此示例中,我收到一个错误在将标头发送到客户端后无法设置标头。第二次尝试:

   await Product.find({})
  .cursor()
  .pipe(JSON.stringify())
  .pipe(res);

在此示例中,我得到 无法读取未定义的属性“on”。我无法找到整个 cursor().pipe() 链接的正确解释,所以如果有人知道,如果你能解释这个逻辑,我会非常高兴。 我不想在这个例子中使用分页。

【问题讨论】:

  • 你应该写.pipe(JSON.stringify),而不是.pipe(JSON.stringify())。现在你执行JSON.stringify 并将返回值传递给.pipe()...

标签: node.js mongodb stream


【解决方案1】:

您只能向客户端发送一次响应。一旦发送,连接就会关闭。在您的情况下,您尝试多次发送响应,因此出现错误。

您需要使用 websockets 或 server-sent-events 来传输数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2023-03-02
    • 1970-01-01
    • 2013-12-02
    相关资源
    最近更新 更多