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

发送请求到时/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失败。


那么这是什么错误呢?


幕布斯7119047
浏览 678回答 3
3回答

摇曳的蔷薇

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

使用现有功能检查ObjectID。var mongoose = require('mongoose');mongoose.Types.ObjectId.isValid('your id here');
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MongoDB