Search code examples
javascriptnode.jsmongoosemongoose-schema

Mongoose pre/post middleware not getting called for model.save


I looked at the documentation and can't figure out the problem. The pre & post middleware doesn't seem to be working. I have updated node and all of my modules.

// schema.js
const schema = mongoose.Schema(...)

schema.pre('save', function(next) {
    console.log('pre save') // I don't see this in the console
    next()
})
schema.post('save', function(next) {
    console.log('post save') // I don't see this in the console
    next()
})

module.exports = ({
    MySchema: mongoose.model('MySchema', schema)
})


// api.js
app.post('/users', (req, res) => {
    const model = new MySchema(...)
    model.save().then(() => {
        res.sendStatus(201)
    })
}

Solution

  • I figured it out. I wasn't filling all of the required fields, and I was going planning on doing so in the pre.save middleware function. I was getting an error "Path fieldName is required" but there was no stack trace, so I didn't know that the issue was with the validate middleware. I assumed the error was happening during the save method.

    TL;DR: The methods in order are init, validate, and save. See Save/Validate Hooks in the documentation.