小编典典

什么是 Mongoose 错误 Cast to ObjectId failed for value XXX at path "_id"?

all

当向不存在/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与 Mongoose 期望的“格式”(我想)不匹配时,例如GET /customers/foo返回一个奇怪的错误:

CastError:路径“_id”处的值“foo”转换为 ObjectId 失败。

那么这个错误是什么?


阅读 63

收藏
2022-07-28

共1个答案

小编典典

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.
}
2022-07-28