因此,开始我对万物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;
};

我对何时使用classMethodsinstanceMethods感到困惑。对我而言,当我考虑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";
}

10-06 11:54