javascript - 未处理的 Promise sequelize hooks 和加密密码

标签 javascript node.js sequelize.js hook

我正在尝试在我的数据库中注册一个用户。

const sequelize = require('sequelize')
const { Model, DataTypes } = sequelize
const bcrypt = require('bcrypt')

class User extends Model {

  isPasswordValid(encondedPassword, password) {
   return bcrypt.compareSync(password, encondedPassword)
  }

  static init(sequelize) {
    super.init({
      email: {
        type: DataTypes.STRING,
        allowNull: false,
        validate: {
          notEmpty: true,
        },
      },
      password: {
        type: DataTypes.STRING,
        allowNull: false,
        validate: {
          notEmpty: true,
        },
      } 
    }, {
      hooks: {
          beforeCreate:  (user, options) => {
            const salt =  bcrypt.genSaltSync()
            user.setAttributes('password', bcrypt.hashSync(user.password, salt))
          }
      },
      sequelize
    })
  }
}

module.exports = User

但是当我调用 User.create({email, password}) 它给了我和错误:

UnhandledPromiseRejectionWarning: SequelizeDatabaseError: "password"列中的空值违反非空约束。

如果删除我的钩子(Hook),代码可以正常工作,但密码不会被加密。

最佳答案

setAttributes receive 3 arguments or an object

试试这个

user.setAttributes('setAttributes', 'password', bcrypt.hashSync(user.password, salt))
//OR
user.setAttributes({password: bcrypt.hashSync(user.password, salt)})

使用更简单 setDataValue
user.setDataValue('password', bcrypt.hashSync(user.password, salt))

关于javascript - 未处理的 Promise sequelize hooks 和加密密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62107010/

相关文章:

javascript - Sequelize 模型查询 - 为什么两条路线不能同时工作?

node.js - Sequelize中字段类型声明方法的区别

javascript - 为什么 Jest 单元测试被破坏了?

javascript - 什么时候需要在 Javascript 中设置类的 'prototype.constructor' 属性?

javascript - jqGrid - 根据数据值过滤行

javascript - 如何在 Android 4.3 及更早版本上隐藏 HTML 元素

node.js - NodeJS MongoDB 避免游标超时

javascript - 逐行读取文本文件并执行函数?

mysql - 如何在 sequelize 中编写嵌套的 select 语句?

javascript - node.js 和 ejs 渲染问题