Mongoose pre / post midleware无法使用ES6访问[this]实例

时间:2016-04-30 16:35:34

标签: node.js mongoose

我陷入困境,尝试使用pre中间件向mongoose模型添加一些预逻辑,并且无法像往常一样访问this实例。

UserSchema.pre('save', next => {
    console.log(this); // logs out empty object {}

    let hash = crypto.createHash('sha256');
    let password = this.password;

    console.log("Hashing password, " + password);

    hash.update(password);
    this.password = hash.digest('hex');

    next();
  });

问题:*有没有办法访问this实例?

1 个答案:

答案 0 :(得分:30)

胖箭头符号(=>)在这种情况下无用。相反,只需使用旧式的匿名函数表示法:

UserSchema.pre('save', function(next) {
  ...
});

原因是胖箭头在词法上将函数绑定到当前范围(更多关于here,但是TL; DR:胖箭头符号并不是通用的快捷符号,它具体是指创建词法绑定函数),而函数应该在Mongoose提供的范围内调用