【发布时间】:2018-08-11 00:47:48
【问题描述】:
我对 Mongo DB/Mongoose 还很陌生,我想确保我以正确的方式处理 Mongoose 错误。我正在尝试通过其 _id 搜索文档。这是我的查询:
const team = await Team.findOne({_id:req.body.invitedTeamID});
这很好用,但我需要验证是否有任何记录从此查询返回,所以经过一番研究后,我将其修改为:
const team = await Team.findOne({_id:req.body.invitedTeamID}, function(err, doc){
if(doc.length === 0 || err){
console.log("no record found!")
}
});
当我为受邀团队 ID 变量输入虚假对象 ID 时,我收到一个丑陋的 Mongoose 拒绝承诺错误,内容如下:
CastError: 值 "005a99
转换为 ObjectId 失败
上述任何一种或两种功能都会发生这种情况,我没有得到我的 console.log 语句。
谁能告诉我正确的处理方法是什么?
谢谢
【问题讨论】:
-
你应该做类似
_id: mongoose.Types.ObjectId(req.body.invitedTeamID)的事情,见这里stackoverflow.com/questions/6578178/… -
你能展示你的团队架构吗
-
@Striped 如果它实际上是一个有效的 ObjectId,您的方法有效,但如果它只是一个随机字符串,它会给我一个长而丑陋的承诺错误。为了在数据传递给不是 ObjectId 格式的查询的情况下处理丑陋的承诺错误,我应该将我的 Await 调用包装在 try catch 中吗?
-
是的,你应该总是用 try/catch 包裹一个 await。
标签: javascript mongodb mongoose