发送请求到时/customers/41224d776a326fb40f000001,_id 41224d776a326fb40f000001不存在的文档,doc是,null并且我返回404: Controller.prototype.show = function(id, res) { this.model.findById(id, function(err, doc) { if (err) { throw err; } if (!doc) { res.send(404); } return res.send(doc); }); };但是,当_id与猫鼬期望的“格式”(我想)不匹配时,例如GET /customers/foo返回一个奇怪的错误:CastError:在路径“ _id”处,对于值“ foo”的转换为ObjectId失败。那么这是什么错误呢?
3 回答
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
Mongoose的findById方法将id参数转换为模型_id字段的类型,以便它可以正确查询匹配的文档。这是一个ObjectId,但"foo"不是有效的ObjectId,因此强制转换失败。
不会发生这种情况,41224d776a326fb40f000001因为该字符串是有效的ObjectId。
解决此问题的一种方法是在findById调用之前添加检查,以查看是否id为有效的ObjectId,如下所示:
if (id.match(/^[0-9a-fA-F]{24}$/)) {
// Yes, it's a valid ObjectId, proceed with `findById` call.
}
慕田峪9158850
TA贡献1794条经验 获得超7个赞
使用现有功能检查ObjectID。
var mongoose = require('mongoose');
mongoose.Types.ObjectId.isValid('your id here');
- 3 回答
- 0 关注
- 728 浏览
添加回答
举报
0/150
提交
取消