【问题标题】:delete property doesn't work in node.js删除属性在 node.js 中不起作用
【发布时间】:2018-02-04 19:16:44
【问题描述】:

我想知道为什么我不能删除密码对象,我的控制台结果显示密码仍然存在,我想知道为什么。

User.comparePassword(password, user.password , (err, result) => {
  if (result === true){
    User.getUserById(user._id, (err, userResult) => {
      delete userResult.password

      const secret = config.secret;
      const token = jwt.encode(userResult, secret);

      console.log(userResult)

      res.json({success: true, msg: {token}});
    });
  } else {
    res.json({success: false, msg: 'Error, Incorrect password!'});
  }
}

【问题讨论】:

  • 什么是userResult?也许它被冻结或类似的东西?
  • @Jonasw 是一个用户对象,不,它没有被冻结。
  • 如果这不起作用,你能把console.log(userResult)移到delete userResult.password下面吗?只是为了确保jwt.encode 不会以某种方式改变userResult
  • User 是续集模型吗?

标签: javascript node.js express ecmascript-6


【解决方案1】:

您的问题有多种解决方案。你不能从 Mongoose 查询中删除属性,因为你得到了一些 Mongoose 包装器。为了操作对象,您需要将其转换为 JSON 对象。所以我记得有三种可能的方式来做到这一点:

1) 像这样调用toObject方法猫鼬对象(userResult):

 let user = userResult.toObject();
 delete user['password'];

2) 重新定义User模型的toJson方法:

UserSchema.set('toJSON', {
        transform: function(doc, ret, options) {
            delete ret.password;
            return ret;
        }
});

3) 查询可以返回没有指定字段的对象,这样你就不需要删除任何东西:

 User.findById(user._id, {password: 0}, function (err, userResult) {
   ...
 }

【讨论】:

  • 哇非常感谢,不知道这和猫鼬有什么关系。
  • 很高兴能帮到你:)
猜你喜欢
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 2018-01-04
  • 2019-01-02
  • 2016-01-19
  • 1970-01-01
相关资源
最近更新 更多