Mongoose 中如何使用 Middlewares

阅读时长 8 分钟读完

Mongoose 是一个优秀的 Node.js 模块,用于在应用程序中连接和管理 MongoDB 数据库。Middlewares 可以帮助开发者在实际的开发中更加方便地进行数据校验和处理,从而提高代码的可维护性和可读性。在 Mongoose 中,Middlewares 是一种特定类型的函数,帮助我们在保存、更新、查询等操作的前后执行一些自定义的业务逻辑。本文将详细介绍在 Mongoose 中如何使用 Middlewares,敬请阅读。

Mongoose Middlewares 的基本结构

Mongoose 中的 Middlewares 可以应用在以下三个不同的层面上:Schema、Document 和 Query。根据执行时机的不同,Mongoose 中的 Middlewares 可以分为三类:Pre 中间件、Post 中间件和 Query 中间件。

Pre 中间件与 Post 中间件的主要区别在于执行时序不同。Pre 中间件会在执行操作之前被执行,而 Post 中间件会在执行操作之后被执行。Query 中间件则可以拦截所有查询操作。

具体来讲,Mongoose 中的 Middlewares 有两个参数,第一个参数是中间件的名称,第二个参数是处理器函数。下面是一个简单的示例:

-- -------------------- ---- -------
----- ------ - --- -----------------
  ----- -------
  ---- ------
---

------------------ -------------- -
  ---------------- --------------
  -------
---

------------------- ------------- ----- -
  ----------------- ----------- ---------
  -------
---

在这个示例中,我们定义了一个 Schema 定义,并在 Pre 中间件中打印了一个信息,在 Post 中间件中输出了一个文档信息。需要注意的是,Schema 中的 Pre 中间件和 Post 中间件只对 document 存储和更新操作起作用。对于查询操作,Query 中间件才会被执行。

中间件分类

Pre 中间件和 Post 中间件

init

首先是 init 中间件。这个中间件会在每次从数据库中加载 document 后被调用。init 中间件的处理器函数接收两个参数,分别为 error 和 document,其中 error 为加载错误对象。

-- -------------------- ---- -------
------------------ -------------- -
  ----------------- --------------
  -------
---

----- ----- - ----------------------- --------

----- ----- - --- ------- ----- ------- ---- -- ---

------------------------ --------------- --------- -
  -- ---- ---------- ---- -- ------
---

validate

validate 中间件会在每次进行保存(save、updateOne、updateMany、init)前被调用。validate 中间件的处理器函数接收一个 callback 函数,可以在其中对当前文档进行验证。

-- -------------------- ---- -------
---------------------- -------------- -
  --------------------- --------------
  -------
---

----- ----- - ----------------------- --------

----- ----- - --- ------- ----- ------- ---- -- ---

-------------------------- --------- -
  -- -------- ---------- ---- -- ------ ------ ----
---

save

save 中间件会在每次进行保存(save、updateOne、updateMany)前被调用。save 中间件的处理器函数接收两个参数,分别为 next 和 defaultErrorHandler。在 save 中间件里,我们可以使用 next 传递一个新的错误信息,或者使用 defaultErrorHandler 处理旧的错误信息。

-- -------------------- ---- -------
------------------ -------------- -
  ----------------- --------------
  -------
---

----- ----- - ----------------------- --------

----- ----- - --- ------- ----- ------- ---- -- ---

-------------------------- --------- -
  -- ---- ---------- ---- -- ------ ------ ----
---

remove

remove 中间件会在每次从数据库中删除文档时被调用。remove 中间件的处理器函数接收两个参数,分别为 next 和 defaultErrorHandler。

-- -------------------- ---- -------
-------------------- -------------- -
  ------------------- --------------
  -------
---

----- ----- - ----------------------- --------

----- ----- - --- ------- ----- ------- ---- -- ---

---------------------------- --------- -
  -- ------ ---------- ---- -- ------ ------ ------
---

Query 中间件

Mongoose 中的 Query 中间件可以拦截所有查询操作,比如 findOne、find、count 等。具体表现是调用 querybuilder 方法中的一个,比如 where、limit、skip 等。

count、find、findOne、findOneAndDelete、findOneAndUpdate、update

count、find、findOne、findOneAndDelete、findOneAndUpdate 和 update 中间件的处理器函数接收两个参数,分别为 next 和 done。它们会在执行查询操作之前被调用。

-- -------------------- ---- -------
------------------ -------------- -
  ----------------- --------------
  -------
---

----- ----- - ----------------------- --------

------------ ---- -- -- --------------- ---------- -
  -- ---- ---------- ---- -- ------ ------ ----
---

remove

remove 中间件的处理器函数接收一个参数 next,它会在执行删除操作之前被调用。

-- -------------------- ---- -------
-------------------- -------------- -
  ---------------------------------
  -------
---

----- ----- - ----------------------- --------

------------------------ ----- ------ -- --------------- --------- -
  -- ------ ---------- ---- -- ------ ------ ----------------
---

Post 中间件

save、remove、findOneAndRemove、findOneAndUpdate

save、remove、findOneAndRemove 和 findOneAndUpdate 中间件的处理器函数接收两个参数,分别为 doc 和 next。它们会在执行操作后被调用。

-- -------------------- ---- -------
------------------- ------------- ----- -
  ----------------- ---- --------------
  -------
---

----- ----- - ----------------------- --------

----- ----- - --- ------- ----- ------- ---- -- ---

-------------------------- --------- -
  -- ---- ---- ---------- ---- -- ------ ----- ----
---

总结

本文详细介绍了 Mongoose 中如何使用 Middlewares,包括 Pre 中间件、Post 中间件和 Query 中间件的分类和使用方法。使用 Mongoose 中间件有助于我们在进行数据操作时加入自定义的业务逻辑,从而降低代码的复杂度和提高代码的可维护性和可读性。

我们希望本文的内容可以对你有所帮助,在你实际的开发工作中更加快速地掌握 Mongoose 和 Middlewares 的使用方法。如果你还有任何问题或建议,欢迎在评论区留言,我们会及时回复并解答。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6476c0e0968c7c53b036782c

纠错
反馈