使用mongoose, 进行数据查询
Model.findOne( { _id: id }, function (err, callback ) )
报错信息为:
CastError: Cast to ObjectId failed for value
如果查询params为非ObjectId格式时,大家一般都如何处理?
1: 通过callback处理异常?
2: 在查询之前就进行判断?如果不是正确格式则就不进入查询
- callback 无需特殊处理这个异常
- 在查询之前就进行判断。或者说,查询之前就强制转换成字符串。如果此时 param 非法的话,结果就是查不到任何数据。
var id = req.params.id
这里的id已经是字符串了,假如我查询的 id 为 ‘test’ (不是‘552a3a7ecd5ee87201ab1edc’格式的),出现的是上面的报错内容。 看到cnode源码里面也是直接查询的,没做处理呀。 网上找到的一个处理方式: http://stackoverflow.com/questions/14940660/whats-mongoose-error-cast-to-objectid-failed-for-value-xxx-at-path-id 不知道如何才能做到 param 非法,结果就是查不到任何数据。
@rudyboy 对的。。cnode 没有做什么特殊处理,如果 id 不合法就只是会查询不到,而不会报 cast 的错误。
如果查询的id已经是ObjectId 格式的了,但是依然会抛出这个错误,又会是什么原因呢?
我也遇到这个问题了,MongooseError: Cast to ObjectId failed for value “user[i]._id” at path “_id”,
router.get("/detail/:id",function(req,res){
var id=req.params.id;
userModel.findOne({_id:id},function(err,data){
if(err) return console.log(err);
res.render("userDetail",{
user:data
})
})
})
不知道哪错了