所以開始我所有的事情冒險節點。我想學習的工具之一是Sequelize。因此,我將開始我試圖做的事:續集類方法vs instanceMethods
'use strict';
var crypto = require('crypto');
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
username: DataTypes.STRING,
first_name: DataTypes.STRING,
last_name: DataTypes.STRING,
salt: DataTypes.STRING,
hashed_pwd: DataTypes.STRING
}, {
classMethods: {
},
instanceMethods: {
createSalt: function() {
return crypto.randomBytes(128).toString('base64');
},
hashPassword: function(salt, pwd) {
var hmac = crypto.createHmac('sha1', salt);
return hmac.update(pwd).digest('hex');
},
authenticate: function(passwordToMatch) {
return this.hashPassword(this.salt, passwordToMatch) === this.hashed_pwd;
}
}
});
return User;
};
我在什麼時候使用classMethods VS instanceMethods困惑。對我來說,當我想到createSalt()和hashPassword()應該是類方法。它們是普遍的,而且大多數情況下,它們實際上與他們通常使用的特定實例沒有任何關係。但是當我在classMethods中創建了createSalt()和hashPassword()時,我無法從instanceMethods調用它們。
我曾嘗試以下的變化:
this.createSalt();
this.classMethods.createSalt();
createSalt();
類似下面不會工作,我可能只是不理解簡單的東西。
authenticate: function(passwordToMatch) {
console.log(this.createSalt());
return this.hashPassword(this.salt, passwordToMatch) === this.hashed_pwd;
}
任何提示/技巧/方向將非常讚賞!
這是有道理的我,這就是我那種想通所以一般功能,如makeSalt()和hashPassword()應該是類的方法,因爲他們真的有與具體實例無關。所以說,現在我真正的問題,我想是不能夠在我的instanceMethod裏面調用一個classMethond,並且不知道這個交易是什麼。 – Silent
我加入了IRC,他們能夠幫助我。它有點不同,然後我也在其他語言中使用,但這只是學習過程的一部分!因爲它是一個類方法,它只是模型的一部分,所以你不必使用「this」之類的東西。你只是稱它爲「User.getSalt()」,所以它現在所有的工作正如我所預料的那樣! – Silent
我感謝您的幫助! – Silent