当前位置: 首页 > 知识库问答 >
问题:

对于路径“\u id”处的值XXX,将Mongoose错误转换为ObjectId失败是什么?

微生自怡
2023-03-14

当向/顾客/41224d776a326fb40f000001发送请求时,并且不存在带有_id41224d776a326fb40f000001的文档,docnull,并且返回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);
    });
  };

但是,当\u id与Mongoose期望的“格式”(我想)不匹配时(例如GET/customers/foo会返回一个奇怪的错误:

CastError:对于路径“\u id”处的值“foo”,转换为ObjectId失败。

那么这个错误是什么?

共有3个答案

太叔富
2023-03-14

我必须将我的路线移动到捕捉路线参数的其他路线之上:

// require express and express router

const express = require("express");
const router = express.Router();

// move this `/post/like` route on top

router.put("/post/like", requireSignin, like);

// keep the route with route parameter `/:postId` below regular routes

router.get("/post/:postId", singlePost);
章阳波
2023-03-14

使用现有函数检查ObjectID。

var mongoose = require('mongoose');
mongoose.Types.ObjectId.isValid('your id here');
葛泳
2023-03-14

Mongoose的findById方法将id参数强制转换为模型的\u 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.
}
 类似资料:
  • 我试图在一个MEAN堆栈应用程序中处理一个计划。当我调用findOne时,我得到了这个错误: 我就是这样做的: 我注意到,当我把id作为一个字符串(如下所示)时,一切正常。 所以,我控制台: 我一直在尝试我在这里找到的东西,但任何东西都可以帮助我解决这个问题:/

  • 我正在用node/express/mongo/mongoose构建一个应用程序。我遇到了一个我似乎无法理解的错误,谷歌搜索到目前为止没有任何帮助。 我创建了一个简单的、以猫为主题的示例来重现我遇到的错误。我基本上是通过ObjectId检索一个对象。我正在使用创建对象时自动生成的对象id(作为字符串)。 当我导航到路径localhost:3000/kitty/586d62878fc14d30e0ac

  • 好吧,我看到这里有一些这样的帖子,但他们没有帮助我。。。 让我描述一下我的问题: 我有两个模式 现在我已经有了一个B对象,我想创建一个a对象。 所以我这样做: b对象是从我的monogDB加载的。调试器为我的b显示了一个有效的ObjectId(53627ed535d9d04416e26218或Sb~Õ5ÙÐDáb)。 但是,当我保存新的A-Object时,会出现错误:“CastError:Cast

  • 我的控制器obter_todos_precos只是一个console.log,没有使用任何模型,但我得到以下错误: 为什么我会有这种行为?

  • Comments是嵌套在Post架构中的数组。我想通过推送一个新的评论到评论数组更新相应的帖子。但是得到了错误:CastError:对于模型“post”的路径“_id”处的值“comments”,向ObjectId的强制转换失败 阅读相关帖子 尝试使用“mongoose.types.objectid”,但不起作用 猫鼬版^5.5.4 我在这里使用的所有ID都是有效的 我认为问题出在“comment

  • 我正在尝试用mongodb和nodejs制作一个应用程序。我做了一个特殊的路由,它有参数,并且运行良好。 我还做了另一个get路线,它有。每次我收到该错误时向该路由发送请求时: 我的路线是: 当我向上面的路由发出get请求时,我得到了该错误: 我的产品模型是: 我怎样才能解决这个问题?