Как я могу использовать методы экземпляра в sequalize?

#node.js #express #sequelize.js #instance-methods

Вопрос:

Это модель пользователя, и я хочу использовать функцию экземпляра verifyPassword из модели пользователя в контроллере входа

 const {Sequelize,DataTypes} =require('sequelize') const Db =require('../config/mysql_connecton'); const bcrypt = require('bcrypt');  const User= Db.define('User', {   firstName:{  type:DataTypes.STRING,  allowNull:false,  },  midName:{  type:DataTypes.STRING,    },  lastName:{  type:DataTypes.STRING,  },  email:{  type:DataTypes.STRING,  allowNull:false,  unique: true,  validate:{  isEmail:true  }  },  contactNo:{  type:DataTypes.STRING,  allowNull:false,  unique: true  },  username:{  type:DataTypes.STRING,  allowNull:false,  unique: true  },  password:{  type:DataTypes.STRING,  allowNull:false,  set(value){  this.setDataValue('password',bcrypt.hashSync(value, 10))  }  }   }, {  timestamps: true,  instanceMethods: {  verifyPassword: function(password) {  return bcrypt.compareSync(password, this.password);  }  } }); Db.sync()  module.exports = User;  

контроллер входа в систему

здесь я использую метод экземпляра verifyPassword для проверки пароля, но получаю ошибку, как показано ниже.

 const User = require('../models/user');  module.exports.login = async (req,res)=gt;{  try{  //password - confirm password check at client side  const user = await User.findOne({where:{username:req.body.username}});  if(user.verifyPassword(user.password)){  console.log("kk");  }  return res.sendStatus(200);  }catch(err){  console.error(`Error in logging user: ${err}`);  return res.sendStatus(403);  } }  

Я получаю следующую ошибку

ошибка: ошибка типа: user.verifyPassword не является функцией

Ответ №1:

 const {Sequelize,DataTypes} =require('sequelize') const Db =require('../config/mysql_connecton'); const bcrypt = require('bcrypt');  const User= Db.define('User', {   firstName:{  type:DataTypes.STRING,  allowNull:false,  },  midName:{  type:DataTypes.STRING,    },  lastName:{  type:DataTypes.STRING,  },  email:{  type:DataTypes.STRING,  allowNull:false,  unique: true,  validate:{  isEmail:true  }  },  contactNo:{  type:DataTypes.STRING,  allowNull:false,  unique: true  },  username:{  type:DataTypes.STRING,  allowNull:false,  unique: true  },  password:{  type:DataTypes.STRING,  allowNull:false,  set(value){  this.setDataValue('password',bcrypt.hashSync(value, 10))  }  }   },  {  timestamps: true, }, {  instanceMethods: {  verifyPassword: function(password) {  return bcrypt.compareSync(password, this.password);  }  } }); Db.sync()  module.exports = User;  

Изменен формат модели… Дайте мне знать, если это сработает.

Комментарии:

1. Спасибо вам за это! но теперь я использую функцию прототипа чуть ниже Db.sync (), и теперь она работает идеально. User.prototype.verifyPassword = function(password) { return bcrypt.compareSync(password, this.password); }

2. Хорошо. Это здорово.