You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose如何为所有查询中间件统一执行Middleware函数

Mongoose 通用查询中间件实现说明

Mongoose 原生不支持使用*通配符批量匹配所有查询方法的中间件注册写法,直接写mySchema.pre('*', 回调函数)无法达到所有查询方法触发时执行逻辑的效果。

想要避免逐个方法写重复中间件的冗余问题,直接遍历所有需要挂载的查询方法名,批量注册同一个处理函数就行,实现非常简单。

具体实现代码

先把所有需要挂载中间件的查询方法整理成数组,再循环给每个方法绑定同一个前置钩子:

// 查询中间件支持的全量方法列表
const queryMethods = [
  'count',
  'countDocuments',
  'deleteMany',
  'deleteOne',
  'estimatedDocumentCount',
  'find',
  'findOne',
  'findOneAndDelete',
  'findOneAndRemove',
  'findOneAndReplace',
  'findOneAndUpdate',
  'remove',
  'replaceOne',
  'update',
  'updateOne',
  'updateMany'
]

// 通用中间件逻辑,所有查询方法触发前都会执行
const commonPreMiddleware = function(next) {
  const query = this
  console.log("通用查询前置中间件已触发")
  // 这里写你的公共逻辑
  next()
}

// 批量注册
queryMethods.forEach(methodName => {
  mySchema.pre(methodName, commonPreMiddleware)
})

补充说明

  • 如果不需要给全量查询方法挂载公共逻辑,直接增删数组里的方法名即可,灵活度比固定的通配符更高
  • 中间件逻辑末尾必须调用next(),否则会卡住整个查询流程
  • 批量注册的中间件和单独给单个方法注册的表现完全一致,内部this依旧指向当前查询实例,没有上下文差异

内容的提问来源于stack exchange,提问作者Islam Y-

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:36:23