Mongoose模型创建完成后是否可以新增hook中间件?
结论:你编写的代码无法正常生效
原因说明
Mongoose 中间件(hook)必须在模型编译完成之前定义,一旦调用mongoose.model()完成模型编译,后续再修改对应 schema 新增pre/post钩子都不会被已生成的模型实例识别,因此不会触发。
你当前的操作是先获取已经编译完成的MyModel模型,再回溯获取关联 schema 添加 save 钩子,属于模型编译后新增 hook 的场景,因此该钩子不会在保存操作时执行。
在编译模型前定义中间件
通常来说,在Mongoose中编译完模型后调用pre()或post()方法不会生效,你编写的pre('save')中间件就属于不会触发的情况。
正确写法示例
所有钩子需要在调用mongoose.model()注册模型之前完成定义:
const mongoose = require('mongoose') // 第一步:定义Schema const UsuarioSchema = new mongoose.Schema({ // 你的模型字段定义 }) // 第二步:添加所有需要的钩子 UsuarioSchema.pre('save', (next) => { console.log('working') next() }) // 第三步:编译模型 const MyModel = mongoose.model('MyModel', UsuarioSchema)
内容的提问来源于stack exchange,提问作者Legna
相关产品推荐
相关产品推荐

