2015-10-20 46 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