node.js - 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放在那里吗?我试过把它放在我能想到的任何地方。
解决方案
根据猫鼬文档...
模型.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)
}
推荐阅读
- solr - 根据字段值提升 solr 结果
- android - Android MediaCodec NDK 不使用 SPS/PPS VUI
- node.js - 无法在 Heroku 中安装节点
- angular - 在我的角度应用程序中创建服务的双重实例
- android - Google Playstore 被忽略 android minSDKVersion?
- highcharts - Highcharts 上的自定义标签显示百分比
- javascript - 重定向页面但仍然在 Laravel 上带来数据
- microsoft-teams - MS-Teams Deeplink 开始与机器人对话
- node.js - 从 CLI 反应开始设置端口号
- codenameone - iPhone 上的代号一 L10NManager.getInstance().formatDateLongStyle