ES6函数回调无法使用Mongoose回调代码

时间:2017-01-17 04:35:30

标签: javascript node.js mongodb mongoose

以下是保存用户时pre挂钩中的一些es5代码:

// On Save Hook, encrypt password
// Before saving a model, run this function
userSchema.pre('save', function(next) {
  // get access to the user model
  const user = this;

  // generate a salt then run callback
  bcrypt.genSalt(10, function(err, salt) {
    if (err) { return next(err); }

    // hash (encrypt) our password using the salt
    bcrypt.hash(user.password, salt, null, function(err, hash) {
      if (err) { return next(err); }

      // overwrite plain text password with encrypted password
      user.password = hash;
      next();
    });
  });
});

以下是相同代码的es6版本:

userSchema.pre('save', (next) => {
  // get access to the user model
  const user = this;

  // generate a salt then run callback
  bcrypt.genSalt(10, (err, salt) => {
    if (err) { return next(err); }

    // hash (encrypt) our password using the salt
    bcrypt.hash(user.password, salt, null, (err, hash) => {
      if (err) { return next(err); }

      // overwrite plain text password with encrypted password
      user.password = hash;
      next();
    });
  });
});

由于某种原因失败了,我不明白为什么!没有抛出任何错误。用户不会使用散列密码字符串保存 - 只是纯文本。

如果我只更改es6示例中的第一行代码:

userSchema.pre('save', function(next) {...

其余部分有效

我不明白这是 mongoose 挂钩工作方式的问题,还是我写 javascript 错了?

0 个答案:

没有答案