javascript node.js orm sequelize.js

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"; }