それで、すべてのものに自分の冒険を始めるNode。私が学ぶことを試みているツールの1つはSequelizeです。だから私は、私がやろうとしていたものから始めます:Sequelize classMethodsと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;
};
私は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;
}
ヒント/ヒント/方向は非常に高く評価されます。基本はinstance
ことですが
//should be a classMethods
function getMyFriends() {
return this.find({where{...}})
}
//should be a instanceMethods
function checkMyName() {
return this.name === "george";
}
のように私のために働きました特定のインスタンスとは関係ありません。だから今私の本当の問題は、私はinstanceMethod内でclassMethondを呼び出すことができず、取引が何であるかわからないと言いました。 – Silent
私はIRCを手に入れました。彼らは私を助けてくれました。その少し違って、私は他の言語でも使用していますが、それは学習プロセスの一部です!そのクラスメソッドからはモデルの一部になるので、 "this"のようなものを使う必要はありません。あなたは単に "User.getSalt()"のように呼び出すので、私は期待していたようにすべて動作します! – Silent
私はあなたの助けに感謝します! – Silent