【问题标题】:Why is my var being returned as undefined when adding .methods to it?为什么我的 var 在添加 .methods 时返回为未定义?
【发布时间】:2019-02-09 13:41:09
【问题描述】:

我正在尝试将 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”

【问题讨论】:

    标签: javascript node.js sequelize.js bcrypt


    【解决方案1】:

    我收到 authTable 未定义的错误

    不,你没有。你会得到一个错误,authTable.methods 未定义。

    define 返回一个Model 的实例,正如您在the documentation of Model 中看到的那样,它没有名为methods 的属性,因此,authTable.methods 将评估为undefined

    【讨论】:

    • 感谢您指出这一点!我发现我可以在表信息之后的 instanceMethods 部分中添加 generateHash 和 validPassword。非常感谢!
    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 2014-06-04
    • 2017-07-23
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    相关资源
    最近更新 更多