postgre 的 BeforeCreate 挂钩不使用 bcryptjs 散列密码

BeforeCreate hook for postgre not hashing password using bcryptjs

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);
    });


  }
}
});

就是returns这个错误。 挂钩叫 简单传递 Promise { } 散列密码 Promise { } 正在执行(默认):INSERT INTO "users" ("user_id","user_name","email","password","createdAt","updatedAt") VALUES (默认,'deaehrddjelltariq','ddehreejd@gmail.com','abcd','2018-02-15 00:17:51.272 +00:00','2018-02-15 [=39= .272 +00:00') 返回 *; (节点:13686)UnhandledPromiseRejectionWarning:错误:非法参数:未定义,对象 在 _async (/Users/mfaisal/NodeProjects/chaffer/node_modules/bcryptjs/dist/bcrypt.js:214:46) 在 /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.gotAccum (/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) 在 Promise._settlePromiseFromHandler (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/promise.js:512:31) 在 Promise._settlePromise (/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) 在 Async._drainQueues (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/async.js:143:10) 在 Immediate.Async.drainQueues (/Users/mfaisal/NodeProjects/chaffer/node_modules/bluebird/js/release/async.js:17:14) 在 runCallback (timers.js:756:18) 在 tryOnImmediate (timers.js:717:5) 在 processImmediate [as _immediateCallback] (timers.js:697:5) (节点:13686)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是在没有 catch 块的情况下在异步函数内部抛出,要么是因为拒绝了一个没有用 .catch() 处理的承诺。 (拒绝编号:1) (节点:13686)[DEP0018] DeprecationWarning:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将以非零退出代码终止 Node.js 进程。

将您的 hook 替换为:

有了hashSync的帮助就不需要promise

beforeCreate : (user , options) => {
    {
        console.log("hook called");

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

    }
}