猫鼬:未处理的承诺拒绝

Mongoose: Unhandled promise rejection

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

如果 _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() 似乎应该 return null,所以我不确定问题出在哪里。我需要在某处放置一个捕获块并将 404 放在那里吗?我试过把它放在我能想到的任何地方。

根据 Mongoose documentation...

Model.findById()

Returns:

  • «Query»

研究 Query API, when used like a Promise, it will invoke the Query.prototype.then() 实施

Executes the query returning a Promise which will be resolved with either the doc(s) or rejected with the error.

要使用它,您需要类似

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

使用 .then() 和 .catch() 将解决您的问题。