【问题标题】:Mongoose async/ await correct method猫鼬异步/等待正确的方法
【发布时间】:2020-08-01 18:15:30
【问题描述】:

我是猫鼬和节点的新手,谁能指出哪种方法是正确的,我的目的是将我的 MongoDB 中所有产品的列表发送给客户端。

方法一

 items = await Product.findById({})
.then((items) => {
  if (items == null) {
    res.status(404).send("no items");
  } else {
    res.send(items);
    next();
  }
})
.catch((err) => {
  res.status(404).send({ error: err });
});

方法二

items = await Product.find({}).exec();
  res.status(200).send(items)
  next();

如果我必须处理项目并在此之后发送,您能否指出我如何再次使用等待呼叫。提前致谢。

【问题讨论】:

    标签: node.js mongodb mongoose async-await


    【解决方案1】:

    方法 2 应该是这样的:

    router.get('/:param', async function(req, res) {
        try {
            let items = await Product.find({}).lean()
            res.status(200).json(items);
        } catch (e) {
            res.status(404).json(e);
        }
    });
    
    1. 你不需要.exec()
    2. 如果你想在items中接收js对象,你需要使用.lean(),而不是mongoose的。
    3. 尽量不要一次请求所有文档集合,尤其是当集合包含超过 1000 个文档时。否则请通过.cursor 或limit(Number) 进行操作,以避免DB 出现问题。

    同样如上所述,尝试使用async/await 和ES6 语法。它只是看起来更好。

    请把问题标记为已回答,以免您的问题被标记。

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 2019-05-10
      • 2020-10-16
      • 2018-04-13
      • 2019-02-15
      • 2018-06-11
      • 2018-08-09
      • 2019-12-12
      • 2016-06-22
      相关资源
      最近更新 更多