Node.js BeforeCreateHook for postgre不使用bcryptjs散列密码

Node.js BeforeCreateHook for postgre不使用bcryptjs散列密码,node.js,hook,sequelize.js,bcrypt,Node.js,Hook,Sequelize.js,Bcrypt,它返回这个错误。 胡克喊道 简单传递承诺{} 哈希密码承诺{} 执行(默认):在“用户”(“用户id”、“用户名”、“电子邮件”、“密码”、“创建数据”、“更新数据”)值中插入(默认值,'deaehrddjelltariq'、'ddehreejd@gmail.com“,”abcd“,”2018-02-15 00:17:51.272+00:00“,”2018-02-15 00:17:51.272+00:00”)返回*; (节点:13686)未处理的PromisejectionWarning:错误:

它返回这个错误。 胡克喊道 简单传递承诺{} 哈希密码承诺{} 执行(默认):在“用户”(“用户id”、“用户名”、“电子邮件”、“密码”、“创建数据”、“更新数据”)值中插入(默认值,'deaehrddjelltariq'、'ddehreejd@gmail.com“,”abcd“,”2018-02-15 00:17:51.272+00:00“,”2018-02-15 00:17:51.272+00:00”)返回*; (节点:13686)未处理的PromisejectionWarning:错误:非法参数:未定义,对象 at_async(/Users/mfaisal/NodeProjects/chaffer/node_modules/bcryptjs/dist/bcrypt.js:214:46) at/Users/mfaisal/NodeProjects/chaffer/node_modules/bcryptjs/dist/bcrypt.js:223:17 在新的承诺() 位于Object.bcrypt.hash(/Users/mfaisal/NodeProjects/chaffer/node_modules/bcryptjs/dist/bcrypt.js:222:20) 承诺时(/Users/mfaisal/NodeProjects/chaffer/models/user.js:29:37) 在新的承诺() 在Function.beforeCreate(/Users/mfaisal/NodeProjects/chaffer/models/user.js:27:14) 在Promise.each.hook(/Users/mfaisal/NodeProjects/chaffer/node_modules/sequelize/lib/hooks.js:130:35) 在tryCatcher(/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/util.js:16:23) 在Object.gotValue(/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/reduce.js:155:18) 在Object.gotacum(/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/reduce.js:144:25) 在Object.tryCatcher(/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/util.js:16:23) 按承诺。_settlePromiseFromHandler(/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/Promise.js:512:31) 按承诺。_结算项目(/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/Promise.js:569:18) 在Promise._settlePromiseCtx(/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/Promise.js:606:10) 在Async._drainQueue(/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/Async.js:138:12) 在异步队列中(/Users/mfaisal/NodeProjects/chaffer/node\u modules/bluebird/js/release/Async.js:143:10) 位于Immediate.Async.drainQueues(/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/Async.js:17:14) 运行回调时(timers.js:756:18) 在tryOnImmediate(timers.js:717:5) 在processImmediate[as_immediateCallback](timers.js:697:5) (节点:13686)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1)
(节点:13686)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

将您的
钩子替换为以下内容:

hashSync
的帮助下,不需要
promise

const userModel = connection.define('user', {
user_id: {
  type: Sequelize.BIGINT,
  primaryKey: true,
  autoIncrement: true
},
user_name: {
  type: Sequelize.STRING,
  unique: true
},
email: {
  type: Sequelize.STRING,
  unique: true
},
password: {
  type: Sequelize.STRING
}
},
{
hooks: {
  beforeCreate: () =>{
    console.log("hook called");
    return new Promise((resolve,reject) => {
      const salt = bcrypt.genSalt(10);
      const passwordHash = bcrypt.hash(userModel.password, salt);
      userModel.password = passwordHash;
      console.log('simple pass', userModel.password);
      console.log('hashed password', passwordHash);
      return resolve(userModel);
    });


  }
}
});

请注意,我得到了“console.log('simple pass,userModel.password);”的“simple pass Promise{}”和类似的passwordHash。谢谢您的一个小改动。我不知道为什么,但“bcrypt.hashSync”在参数中抛出非法参数异常,并带有“Salt”。我用一个整数替换了它,现在它可以正常工作了。
beforeCreate : (user , options) => {
    {
        console.log("hook called");

        //const salt = bcrypt.genSalt(10);
        user.password = user.password && user.password != "" ? bcrypt.hashSync(user.password, 10) : "";

    }
}