为了账号安全,请及时绑定邮箱和手机立即绑定

在路径“ _id”中,值XXX的猫鼬错误转换为ObjectId失败了吗?

在路径“ _id”中,值XXX的猫鼬错误转换为ObjectId失败了吗?

幕布斯7119047 2019-09-21 11:42:22
发送请求到时/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.

}


查看完整回答
反对 回复 2019-09-21
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

使用现有功能检查ObjectID。


var mongoose = require('mongoose');

mongoose.Types.ObjectId.isValid('your id here');


查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 674 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信