使用bcrypt.hash时出现未知错误

时间:2015-05-16 22:34:11

标签: node.js mongodb mongoose bcrypt

我有这个用于保存密码的pre mongoose中间件,我之前使用过同步实现,现在我正在做一个异步实现作为mongoose中间件:

schema.pre('save', function(next) {
  var user = this;
  var SALT_WORK_FACTOR = 5;

  if (!user.isModified('local.password')) return next();

  bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) {
    if (err) return next(err);

    bcrypt.hash(user.local.password, salt, function(err, hash) {
        if (err) return next(err);
        user.local.password = hash;
        next();
    });
  });
});

代码在到达bcrypt.hash时会抛出一个未知错误,尽管错误是null之前的错误。如果我使用类似stackup的内容,则错误如下所示:

E:\Do\login\node_modules\stackup\index.js:32
      error.stack = activeTrace.toString(error.stack);
                  ^
TypeError: Cannot assign to read only property 'stack' of No callback function w
as given.
    at AsyncListener.error (E:\Do\login\node_modules\stackup\index.js:32:19)
    at asyncCatcher (E:\Do\login\node_modules\stackup\node_modules\async-listene
r\glue.js:123:26)
    at process._asyncFatalException [as _fatalException] (E:\Do\login\node_modul
es\stackup\node_modules\async-listener\glue.js:211:14)

1 个答案:

答案 0 :(得分:1)

您正在使用bcrypt-nodejs,它需要两个回调:

hash(data, salt, progress, cb)

docs

您只提供过一次,因此cb点击它时未定义bcrypt-nodejs