在 Mongoose 中,Hooks 可以用来在操作数据库前或后执行一些操作。这些操作可以是修改数据、验证数据等。
Hooks 的种类
Mongoose 中有四种 Hooks,分别是:
- document middleware
- model middleware
- aggregate middleware
- query middleware
Document Middleware
Document Middleware 是在操作单个文档(document)时执行的钩子,可以用来修改文档、验证文档等。
Document Middleware 又分为以下两种:
- pre
- post
pre
pre 钩子在操作前执行,可以用来修改数据,例如在保存前对数据进行加密:
----- ---------- - --- ----------------- --------- ------- --------- ------ --- ---------------------- -------------- - ----- ---- - ----- -------------------------- --- ------------- ----- - -- ----- ------ ---------- ------------- - ----- ------- --- ---
这个例子中,我们在保存用户数据前对密码进行了加密。
post
post 钩子在操作后执行,可以用来做一些与数据库操作无关的事情,例如发送邮件:
----------------------- -------------- - --------------------- -------- -- --- -------- ---
Model Middleware
Model Middleware 是在对整个模型(model)进行操作时执行的钩子,可以用来修改数据、验证数据等。
Model Middleware 又分为以下两种:
- pre
- post
pre
pre 钩子在操作前执行,可以用来修改数据,例如在删除用户前删除用户的所有文章:
------------------------ -------------- - ----- ---- - ----- -------------------- ------- -------- -- ------ ---
这个例子中,我们在删除用户前删除了用户的所有文章。
post
post 钩子在操作后执行,可以用来做一些与数据库操作无关的事情,例如记录日志:
------------------------- -------------- - --------- - - ------------- - - ----------- ---
Aggregate Middleware
Aggregate Middleware 是在对聚合操作(aggregate)进行操作时执行的钩子,可以用来修改数据、验证数据等。
Aggregate Middleware 又分为以下两种:
- pre
- post
pre
pre 钩子在操作前执行,可以用来修改数据,例如在聚合前限制查询结果的数量:
--------------------------- -------------- - ----- -------- - ---------------- ------------------ ------- --- --- ------- ---
这个例子中,我们在聚合前限制了查询结果的数量。
post
post 钩子在操作后执行,可以用来做一些与数据库操作无关的事情,例如记录日志:
---------------------------- ---------------- - -------------- ------- - - -------- ---
Query Middleware
Query Middleware 是在对查询操作(query)进行操作时执行的钩子,可以用来修改数据、验证数据等。
Query Middleware 又分为以下两种:
- pre
- post
pre
pre 钩子在操作前执行,可以用来修改数据,例如在查询前限制查询结果的数量:
---------------------- ---------- - ---------------- ---
这个例子中,我们在查询前限制了查询结果的数量。
post
post 钩子在操作后执行,可以用来做一些与数据库操作无关的事情,例如记录日志:
----------------------- ---------------- - --------- ------- - - -------- ---
总结
Hooks 是 Mongoose 中非常重要的一个功能,可以用来在操作数据库前或后执行一些操作。在使用 Hooks 时,我们需要注意钩子的种类和执行时机,以及如何正确地使用钩子来修改数据、验证数据等。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65d3da31add4f0e0ffbefa44