【问题标题】:Getting cast error with ObjectID despite no objectID尽管没有 objectID,但 ObjectID 出现强制转换错误
【发布时间】:2020-06-14 14:44:26
【问题描述】:

我不断从这段代码中得到这个错误,不知道为什么 {"Error: CastError: Cast to ObjectId failed for value \"confirmed\" at path \"_id\" for model \"Order\""}

如您所见,我什至没有在此查询中使用 objectID...我不知道它为什么返回这个

router.get("/orders/confirmed", async (req, res) => {
    try {
        const confirmedOrders = await Order.find({ isConfirmed: false })
        res.json(confirmedOrders)
    } catch (err) {
        res.status(400).json("Error: " + err)
    }
})

【问题讨论】:

  • 在我看来,这条路线上方有一条路线,更像是“/: model/:id”。它首先发现路由参数。在您的代码中将该路线移至此路线下方。这样,这个特定的路由将首先匹配,然后如果使用其他单词\id,另一个将匹配。

标签: node.js mongoose async-await


【解决方案1】:

添加我的评论作为答案,因为我 99% 确定就是这样。我去过....

在我看来,这条路线上方有一条路线,更像是“/:model/:id”。它首先发现路由参数。在您的代码中将该路线移到此路线下方。这样,如果使用其他单词\id,则此特定路由将首先匹配,然后另一个将匹配。

更一般的注释。始终对最具体到最不具体的路线进行排序,以尽量避免这种情况。您希望 /really/specific/ 出现在 /:something/:else 之前,因为如果它们的顺序错误,处理程序会像这样匹配 var ......正如您在当前情况下看到的那样。

req.params.something === "真的" req.params.else === "具体"

【讨论】:

  • 哦....我从来没有意识到 express 是这样工作的!感谢您的帮助!
猜你喜欢
  • 2018-03-15
  • 2013-05-15
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 2022-01-23
  • 2017-11-13
  • 1970-01-01
相关资源
最近更新 更多