猫鼬:未处理的承诺拒绝
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() 将解决您的问题。
我知道还有其他帖子也有类似的问题,但是 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() 将解决您的问题。