2015-10-20 78 views
4

我跑在MEAN.js一些项目对象的属性和我有以下问题。我希望做一些用户的个人资料计算和保存到数据库中。但是,有一个在用户模型方法的问题:的Javascript删除不工作

UserSchema.pre('save', function(next) { 
    if (this.password && this.password.length > 6) { 
     this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64'); 
     this.password = this.hashPassword(this.password); 
    } 
    next(); 
}); 

如果我将与我的变更发送密码,它会改变凭证,以便用户无法登录下一次。我想保存之前删除用户对象的密码,但我不能这样做(让我们来看看下面我的代码中的注释):

exports.signin = function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
     if (err || !user) { 
      res.status(400).send(info); 
     } else { 
      /* Some calculations and user's object changes */ 
      req.login(user, function(err) { 
       if(err) { 
        res.status(400).send(err); 
       } else { 
        console.log(delete user.password); // returns true 
        console.log(user.password); // still returns password :(
        //user.save(); 
        //res.json(user); 
       } 
      }); 
     } 
    })(req, res, next); 
}; 

有什么不对?为什么delete方法返回true,但没有任何反应?感谢您的帮助:)

+0

不严格模式删除将返回true,即使该属性不能被删除。同时删除将返回true,当通过原型链所得的财产没有任何效果。 – Prusse

+0

'“使用严格的”;'是我的控制器文件的第一行。但我怎样才能删除密码属性? – user3216673

+0

这似乎不太可能,但是您是否检查'password'属性是否是'user'对象的属性,并且不是来自原型链上的某个人(hasOwnProperty)?设置为“未定义”将不够用(对不起,没有平均堆栈的经验)?至于JSON编码去那里应该在结果没有差异。 – Prusse

回答

5

有在JavaScript

  1. 如果该属性是“严格模式”比它会返回false的自己的非可配置的属性为delete运算符的某些规则。

例如

x = 42;   // creates the property x on the global object 
var y = 43;  // creates the property y on the global object, and marks it as non-configurable 

// x is a property of the global object and can be deleted 
delete x;  // returns true 

// y is not configurable, so it cannot be deleted     
delete y;  // returns false 
  1. 如果对象从一个原型继承的属性,并且不具有该属性本身,该属性,无法删除通过引用该对象。但是,您可以直接在原型上删除它。

例如

function Foo(){} 
Foo.prototype.bar = 42; 
var foo = new Foo(); 

// returns true, but with no effect, 
// since bar is an inherited property 
delete foo.bar;   

// logs 42, property still inherited 
console.log(foo.bar); 

的话,请交叉检查这些点和更多信息您可以阅读这篇Link

+0

谢谢,'delete User.prototype.password;'工作:) – user3216673