【问题标题】:Node : Cannot pass mongodb id equality check节点:无法通过 mongodb id 相等性检查
【发布时间】:2020-08-30 00:33:52
【问题描述】:

我知道这听起来很愚蠢,但我真的想知道我在这里缺少什么?

错误:没有成功检查 Mongodb 的 id 相等性,而是抛出 NotAuthorizedError。

代码:

router.post('/:id', currentUser, authenticate, async (
    req: Request, res: Response
) => {

    const id = req.params.id
    const project = await Project.findById(id)
    if (!project) throw new NotFoundError()

    console.log(`CURRENT USER "${req.currentUser!.id}" AND PROJECT OWNER "${project.user}"`)
// OUTPUT : 
//CURRENT USER "5f499321ecae75127075ebae" AND PROJECT OWNER "5f499321ecae75127075ebae"

    if (project.user !== req.currentUser!.id) throw new NotAuthorizedError()
    await project.remove()
    res.status(201).send({})
})

应该和控制台中明确记录的一样

【问题讨论】:

  • 我的猜测是您正在将字符串与实现自定义 toString 的包装器进行比较,因此针对引用测试字符串。您是否尝试与project.user.toString() 进行比较?
  • 就是这样。谢谢,我过去从未真正遇到过这个问题。我想知道我做了什么不同。
  • @36ve 将此作为 OP 可以接受的答案发布:)
  • 谢谢@eol :)

标签: node.js mongodb typescript express mongoose


【解决方案1】:

我的猜测是您正在将字符串与实现自定义 toString 的包装器进行比较,因此针对引用测试字符串。您是否尝试与project.user.toString() 进行比较?

【讨论】:

  • 我将用户类型保存为mongoose.types.schema.objectId,这就是为什么我需要将其更改为字符串
猜你喜欢
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
相关资源
最近更新 更多