所以开始我的冒险进入Node的所有事情.我正在努力学习的工具之一是Sequelize.所以我将开始我想要做的事情:
'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()
应该是班级方法时,对我来说.它们是通用的,并且大多数情况下它们与一般使用的特定实例没有任何关系.但是,当我createSalt()
和我在一起时hashPassword()
,classMethods
我无法打电话给他们instanceMethods
.
我尝试过以下变体:
this.createSalt(); this.classMethods.createSalt(); createSalt();
像下面的东西不会工作,我可能只是不理解简单的东西.
authenticate: function(passwordToMatch) { console.log(this.createSalt()); return this.hashPassword(this.salt, passwordToMatch) === this.hashed_pwd; }
任何提示/提示/方向将非常感谢!
所有不修改或检查任何类型实例的方法都应该是classMethod
其余的instanceMethod
例如:
// Should be a classMethods
function getMyFriends() {
return this.find({where{...}})
}
// Should be a instanceMethods
function checkMyName() {
return this.name === "george";
}