我正在尝试通过使用插件来覆盖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 ,我想念什么?
答案 0 :(得分:1)
不要使用箭头功能。
Mongoose扩展(例如插件和实例方法)取决于Mongoose能够设置this
,箭头功能不支持该功能。
不要使用ES6箭头功能(
=>
)声明方法。箭头函数明确禁止绑定this
,因此您的方法将无权访问文档,并且以上示例 无效。