Sequelize.js this.getDataValue不是函数模型sequelize v.5

Sequelize.js this.getDataValue不是函数模型sequelize v.5,sequelize.js,Sequelize.js,我无法在sequelize模型中访问this.getDataValue,但它在文档中说我们可以访问它,我使用的是sequelize v5。 我不知道我必须做什么,但我已经想出了很多事情 module.exports = (sequelize, DataTypes) => { var User = sequelize.define('User', { email: DataTypes.STRING, name: DataTypes.STRING, password

我无法在sequelize模型中访问this.getDataValue,但它在文档中说我们可以访问它,我使用的是sequelize v5。 我不知道我必须做什么,但我已经想出了很多事情

module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define('User', {
    email: DataTypes.STRING,
    name: DataTypes.STRING,
    password : DataTypes.STRING,
    is_active : DataTypes.BOOLEAN,
  }, {});

  User.associate = function(models) {
    // associations can be defined here
  };

  User.toJSON = function () {
    var values = Object.assign({}, this.get());
    delete values.password;
    return values;
  }

  User.comparePassword = async function (email, pw) {
    let err, pass;
    //ERROR RIGHT HERE
    if(!this.getDataValue('password')) TE('password not set');

    [err, pass] = await to(bcrypt_p.compare(pw, this.password));
    if(err) TE(err);

    if(!pass) TE('invalid password');

    return this;
  }

  User.getJWT = function () {
    return "Bearer "+jwt.sign({id:this.id}, "BAMBANG", {expiresIn: 86400});
  };

  User.toWeb = function () {
    let json = this.toJSON();
    return json;
  };

  return User;
};

似乎您添加了类方法而不是实例方法。这是官方文件中的一个示例:

// Adding a class level method
User.classLevelMethod = function() {
  return 'foo';
};

// Adding an instance level method
User.prototype.instanceLevelMethod = function() {
  return 'bar';
};

您是否在错误行中检查了“this”?它是一个静态模型对象还是一个记录实例?是的,我检查了它,它返回用户实例,我也试过了,但不工作Docs说你可以在模型中定义的getter和setter中调用getDataVelue。我认为它的v4,im在v5模型中使用的v5被定义为es6类。我在你的问题中没有这样的定义