javascript - 删除属性在node.js中不起作用

标签 javascript node.js express ecmascript-6

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

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!'});
  }
}

最佳答案

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

1) 调用 mongoose 对象 (userResult) 的 toObject 方法,如下所示:

 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) {
   ...
 }

关于javascript - 删除属性在node.js中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45903411/

相关文章:

javascript - 无法在 res.json 中获得响应

javascript - 如何从 Backbone 中嵌套的 json 对象获取模型属性

node.js - JavaScript 在 if 语句中等待异步函数

node.js - Mongoose 拒绝将有效字符串转换为 ObjectId

node.js - Mongoose 无效运算符$match

node.js - 如何在 Passport 策略中使用res.send?

javascript - React 组件返回原始 HTML

javascript - 用于滚动页面、更改背景并在 anchor 单击时淡入淡出的 jQuery 插件?

javascript - redis-server 离线导致 Node 崩溃

javascript - 使用 mongoose 查询测试快速路由