首页 > 解决方案 > Mongoose:未处理的承诺拒绝

问题描述

我知道还有其他类似问题的帖子,但我尝试过的建议都没有奏效。

如果 _id 有效,则以下内容有效,但如果不是,则引发未处理的承诺拒绝错误:

const Movie = mongoose.model(`Movie`, movieSchema);


router.get(`/api/movies/:id`, async (req, res) => {
    let movie = await Movie.findById(req.params.id);

    if(!movie) {
        res.status(404).send(`Movie with given ID not found.`);
        return;
    };
});

根据文档,如果找不到 id,findById() 似乎应该返回 null,所以我不确定问题是什么。我需要在某个地方放一个catch块并将404放在那里吗?我试过把它放在我能想到的任何地方。

标签: node.jsmongodbasynchronousmongooseunhandled-promise-rejection

解决方案


根据猫鼬文档...

模型.findById()

回报:

  • “询问”

查看Query API,当像 a 一样使用时Promise,它将调用Query.prototype.then()实现

执行返回 a 的查询,该查询Promise将使用 doc(s) 解决或以 error 拒绝

要使用它,您需要类似的东西

try {
  const movie = await Movie.findById(req.params.id)
  // do stuff with movie
} catch (err) {
  res.sendStatus(404)
}

推荐阅读