【问题标题】:Cast to ObjectId failed for value " " at path "_id" for model模型的路径“_id”处的值“”转换为 ObjectId 失败
【发布时间】:2023-03-28 05:29:02
【问题描述】:

我遇到了一个错误,我不明白它是如何发生的。如果我的路线按以下顺序排列:

我的控制器 obter_todos_precos 只是一个 console.log 并且没有使用任何模型,但我收到以下错误:

"message": "Cast to ObjectId failed for value \"preco\" at path \"_id\" for 
model \"ZonaModel\""

我通过以这种方式更改路线的顺序找到了解决方案:

为什么我会有这种行为?

【问题讨论】:

  • 可能文本 preco 被解释为路由 :id_zona 的 id
  • 尝试将(':id_zona')更改为(':id_zona([1-9]\\d*)')
  • 失踪的;之后不是问题。
  • 喜欢复制和粘贴代码而不是打印屏幕
  • 用 (':id_zona([1-9]\\d*)') 更改 id_zona 有效,但我的 id 是 ObjectId,所以它不是数字。

标签: javascript node.js


【解决方案1】:

路由器匹配它匹配的第一个路由 /:id_zona 和 /preco 路由到与preco 相同的路径也可以是id_zona 的值

所以当 /preco 高于它时,它可以工作, 而当 /:id_zona 在上面并且您尝试使用 /preco 时,路由匹配 /:id_zona 并且 id_zona 的值是 preco ,在您的控制器中希望是 ObjectId 类型

【讨论】:

  • 在 ID 有效时使用正则表达式,但有没有更好的方法来避免这种情况,而不是使用正则表达式或更改我的路线顺序?
  • 改变路线的顺序会更好
猜你喜欢
  • 2017-05-23
  • 2020-11-19
  • 2021-05-12
  • 2021-07-04
  • 2017-08-18
  • 2019-06-26
  • 2014-06-20
  • 2017-05-19
  • 2017-11-10
相关资源
最近更新 更多