为什么我无法使用插件替代功能访问Mongoose中的findOneAndUpdate?

时间:2018-11-01 20:38:29

标签: node.js mongoose

我正在尝试通过使用插件来覆盖findOneAndUpdate方法:

// Messages is a Mongoose Model
await Messages.newFindOneAndUpdate(query, payload, options);

在消息架构定义中,我有:

MessagesSchema.plugin(require('../util/schema-api-aware-plugin'));

该插件仅声明静态方法 newFindOneAndUpdate

module.exports = (schema) => {

    schema.statics.newFindOneAndUpdate = async (query, data, options) => {
        const me = this;

        try {
            return await me.findOneAndUpdate(query, data, options);
        }
        catch (err) {
            errorManager(err, res);
            return null;
        }
    }

};

运行该命令时,出现类型错误me.findOneAndUpdate is not a function。该模型有效,插件已按需连接,存在静态方法,但由于某种原因,应该是 this me 没有方法 findOneAndUpdate ,我想念什么?

1 个答案:

答案 0 :(得分:1)

不要使用箭头功能。

Mongoose扩展(例如插件和实例方法)取决于Mongoose能够设置this,箭头功能不支持该功能。

Mongoose documentation指出:

  

不要使用ES6箭头功能(=>)声明方法。箭头函数明确禁止绑定this,因此您的方法将无权访问文档,并且以上示例 无效。