Così inizio la mia avventura in tutte le cose Nodo. Uno degli strumenti che sto cercando di imparare è Sequelize. Così ho partirà quello che stavo cercando di fare:Sequelize classMethods 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;
};
Sono confuso su quando utilizzare classMethods vs instanceMethods. Per me, quando penso a createSalt() e hashPassword() dovrebbero essere metodi di classe. Sono generali e per la maggior parte non hanno davvero nulla a che fare con l'istanza specifica in cui sono usati in generale. Ma quando ho createSalt() e hashPassword() in classMethods non posso chiamarli da instanceMethods.
ho provato le variazioni delle seguenti operazioni:
this.createSalt();
this.classMethods.createSalt();
createSalt();
Qualcosa come di seguito non funzionerà e io sono probabilmente solo non capire qualcosa di semplice.
authenticate: function(passwordToMatch) {
console.log(this.createSalt());
return this.hashPassword(this.salt, passwordToMatch) === this.hashed_pwd;
}
Qualsiasi suggerimento/consiglio/direzione sarebbe molto apprezzato!
che ha senso per me e questo è quello che tipo di pensato funzioni in modo generale, come makeSalt() e hashPassword() dovrebbe essere metodi di classe, perché davvero hanno niente a che fare con l'istanza specifica. COSÌ ho detto ora che il mio vero problema credo non sia in grado di chiamare una classe Methond all'interno del mio instanceMethod e non sono sicuro di quale sia l'accordo. – Silent
Sono entrato nell'IRC e sono stati in grado di aiutarmi. È un po 'diverso da quello che uso anche in altre lingue, ma è solo una parte del processo di apprendimento! dato che è un metodo di classe, diventa parte del modello, quindi non devi usare qualcosa come "questo". lo chiamate semplicemente come "User.getSalt()", quindi tutto funziona ora come mi sarei aspettato! – Silent
Apprezzo il tuo aiuto! – Silent