javascript - Secuela de ClassMethods vs instanceMethods
node.js orm (3)
Aunque lo básico es que los métodos de instance
deben usarse cuando desee modificar su instance
(ergo row). Preferiría no contaminar los métodos de classMethods
con métodos que no usan la class
(ergo la tabla) en sí.
En su ejemplo, pondría la función hashPassword
fuera de su clase y la dejaría como una función auxiliar en algún lugar de mi módulo de utilidades (o por qué no el mismo módulo pero como una función definida normal) ...
var hashPassword = function(...) { ... }
...
...
instanceMethods: {
authenticate: function( ... ) { hashPassword( ... ) }
}
Así que comenzando mi aventura en todas las cosas de Nodo. Una de las herramientas que estoy tratando de aprender es Sequelize. Así que empezaré con lo que estaba tratando de hacer:
''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;
};
Estoy confundido sobre cuándo usar classMethods
vs instanceMethods
. Para mí cuando pienso en createSalt()
y hashPassword()
deberían ser métodos de clase. Son generales y, en su mayor parte, realmente no tienen nada que ver con la instancia específica que se utilizan en general. Pero cuando tengo createSalt()
y hashPassword()
en classMethods
no puedo llamarlos desde instanceMethods
.
He intentado variaciones de lo siguiente:
this.createSalt();
this.classMethods.createSalt();
createSalt();
Algo como abajo no funciona y probablemente no entiendo algo simple.
authenticate: function(passwordToMatch) {
console.log(this.createSalt());
return this.hashPassword(this.salt, passwordToMatch) === this.hashed_pwd;
}
Cualquier consejo / consejo / dirección sería muy apreciado!
Encontré esto funcionó para mí a partir de secuela 3.14
var myModel = sequelize.define(''model'', {
}, {
classMethods: {
someClassMethod: function() {
return true;
}
}, {
instanceMethods: {
callClassMethod: function() {
myModel.someClassMethod();
}
}
});
Todos los métodos que no modifiquen o verifiquen ningún tipo de instancia deben ser classMethod
y el resto instanceMethod
ex:
// Should be a classMethods
function getMyFriends() {
return this.find({where{...}})
}
// Should be a instanceMethods
function checkMyName() {
return this.name === "george";
}