为什么在添加.method时将其var返回为undefined?

时间:2019-02-09 05:29:35

标签: javascript node.js sequelize.js bcrypt

我正在尝试将bycrypt添加到身份验证表中,但是在尝试添加generateHash和validPassword方法时遇到错误,提示authTable未定义。关于authTables.methods部分,我是否不了解?

当我注释掉generateHash和validPassword部分时,代码起作用,这使我相信.methods是挂断的。

var bcrypt = require("bcryptjs");

module.exports = function (sequelize, DataTypes) {
  var authTable = sequelize.define("authTable", {

    username: {
    type: DataTypes.STRING,
    allowNull: false,
    validate: {
      len: [1, 30]
    }
  },
  password: {
    type: DataTypes.STRING,
    allowNull: false,
    validate: {
      len: [6, 20]
    }
  },
  email: {
    type: DataTypes.STRING,
    allowNull: false,
    validate: {
      isEmail: true,
      len: [1]
    }
  }
});

authTable.methods.generateHash = function(password) {
  return bcrypt.hashSync(password, bcrypt.genSaltSync(10), null);
};

authTable.methods.validPassword = function(password) {
  return bcrypt.compareSync(password, this.local.password);
};

return authTable;
}

我希望它会使用加密的密码进入数据库中的表。

我收到的错误是:

TypeError:无法设置未定义的属性'generateHash'。

TypeError:无法设置未定义的属性'validPassword'

1 个答案:

答案 0 :(得分:0)

  

我收到未定义authTable的错误

不,你不知道。您收到错误消息authTable.methods未定义。

define返回一个Model的实例,正如您在the documentation of Model中所看到的,它没有名为methods,ergo,authTable.methods的属性将得出undefined