比较Express用户和猫鼬外键

时间:2018-09-16 18:25:21

标签: javascript express mongoose

我的猫鼬模型包含模型User的外键。 如果出现放置,发布或删除请求,我想检查当前已认证用户的主ID是否与外键相同。

如果我登录ID,它们是完全相同的,但是代码似乎有所不同。有人可以告诉我正确的方法吗?预先感谢。

模型

mongoose.model(
  'MyModel',
  mongoose.Schema({
    user: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'User',
      required: true
    },
    ...
  })
)

快速路线

router.put('/models/:id', auth, (req, res, next) => {
  MyModel.findById(req.params.id, (err, model) => {
    if (err) return res.status(500).send({success: false, msg: 'Model not found'});
    if (req.user._id !== model.user) return res.status(500).send({sucess: false, msg: 'You did not create this model'});

    ...success...
  });
});

1 个答案:

答案 0 :(得分:1)

在模型中,您将用户存储为ObjectId,并在与用户匹配时将其存储,

if (req.user._id !== model.user)

它总是返回true,因为req.user._id是字符串类型,而model.userObjectId类型。就像

if ("5b9b69933fc1de058a4086ed" !== ObjectId("5b9b69933fc1de058a4086ed")

您可以通过将用户ID转换为ObjectId类型来进行比较。

import mongoose from 'mongoose';

if (!new mongoose.Types.ObjectId(user._id).equals(model.user))