什么是 Mongoose 中间件?
Mongoose 是 Node.js 下面用于连接 MongoDB 的一个库,它通过定义 model 来实现数据的 CRUD 操作。而 Mongoose 中间件就是在 model 操作前后添加一些自定义的逻辑操作,类似于 express 中间件在路由前后添加自定义的逻辑操作。Mongoose 中间件可以在数据保存、更新、查找等操作之前或之后加入一些逻辑改变数据的状态。
Mongoose 中间件分类
Mongoose 中间件分为前置中间件和后置中间件,前置中间件在操作前执行,后置中间件在操作后执行。而更特殊的中间件是文档中间件,文档中间件是指针对单个文档的中间件,在每个文档的 save、validate、remove 时都会触发。
中间件的使用
中间件的使用非常简单,只需在 model 定义后通过 pre
或 post
方法定义中间件即可。例如:
-- -------------------- ---- ------- -- ---- ---- - ----- ----- ----------- --- ----------------- ----- ------- ---- ------ -- ----- ---- - ---------------------- ----------- -- ----- ---------------------- -------------- - ------------------- --------- ------- --- -- ----- ----------------------- ------------- ----- - ------------------ -------- ----- ------- --- -- ----- ------------------------ -------------- - ------------------- ----------- ------- ---
前置中间件示例
在前置中间件中,我们可以修改一些数据的值或者添加一些校验操作。下面是一个示例:
-- -------------------- ---- ------- ---------------------- --------------- --- ---- - ----- -------------------------------- -- ---------- ---- ------ ------------------ ----- ----- -- - -------------------------- ----- ----- ----- -- - ------------- - ----- ------- --- --- - ---- - ------- - ---
上述代码中,我们使用 bcrypt 库对密码进行了 hash 生成,当密码被修改时,保存到数据库的就是 hash 后的密码。
后置中间件示例
在后置中间件中,我们可以对保存到数据库的数据进行日志记录或者触发其他操作。下面是一个示例:
userSchema.post('save', function(doc, next){ console.log(`${doc._id} is saved`); next(); });
上述代码中,当一个文档被保存到数据库中时,日志将记录下文档的 id。
文档中间件示例
文档中间件和前置后置中间件有一些区别,如可以访问文档本身,并在文档本身属性上执行逻辑操作。下面是一个示例:
-- -------------------- ---- ------- ------------------------ --------------- --- ---- - ----- ------------- ----- -------- -- ----- -- - -- ------ ---------- ------ ------- - --- ---
上述代码中,当一个 User 被删除时,数据库中所有该 User 的 Post 也将被删除。
总结
Mongoose 中间件是一个非常实用的功能,它允许我们在 model 操作前或操作后添加一些自定义逻辑操作。中间件的分类有前置中间件、后置中间件和文档中间件。前置后置中间件可以用于日志记录、密码加密、校验等操作,而文档中间件在文档被操作时可以访问文档本身并执行逻辑操作。
掌握好 Mongoose 中间件的使用,能够让我们更好地理解和使用 Mongoose,提高开发效率和代码的可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6450d872980a9b385b9bc8d4