如何正确使用 Mongoose 中的 pre 中间件

Mongoose 是 MongoDB 的一个 Node.js ORM,可以用它轻松地操作 MongoDB 数据库。Mongoose 使用了 pre 和 post 中间件来提供健壮性,提供更加灵活的模型操作。在本文中,我们将讨论 pre 中间件的使用。

pre 中间件是什么?

pre 中间件,也叫前置中间件,是一种命名钩子,它可以在指定活动触发之前运行。比如调用 save() 方法之前,可以在 pre('save', function(next) {}) 添加一个中间件,以便可以处理保存前数据。

使用 pre 中间件的例子

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

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

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

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

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

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

从上面的示例代码可以看到,我们向 PersonSchema 添加了一个 pre 中间件,用来在将数据保存到数据库之前打印一条消息。代码运行后,终端输出:

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

pre 中间件与异步操作

pre 中间件与异步操作的结合非常重要。在 pre 中间件中调用异步函数的话,必须等待异步函数执行完毕之后才能调用 next()。

为了使异步操作能够正确执行,一般情况下,我们需要指定传递给 next() 的参数,如下所示。

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

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

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

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

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

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

从上面的代码可以看到,在 pre 中间件中,我们对数据库进行了一次查询,并使用返回值执行了 next()。在这种情况下,如果查询出现错误,则会调用 next(err),如果查询返回值为 null,则会调用 next()。

运行顺序

Mongoose 支持多个前置中间件,可以在相同的触发器中添加多个。如果添加多个 pre 中间件,那么它们将依次按照添加的顺序运行。

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

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

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

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

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

从上面的代码可以看到,在 PersonSchema 中添加了两个 pre 中间件,并在运行时输出了两行消息,它们按照添加的顺序运行。

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

结论

在前端开发中,与数据库有关的操作属于比较高级的任务。而在使用 Mongoose 的时候,pre 中间件是非常有帮助的,你可以使用它来处理数据保存、更新之前的操作。本文对使用 pre 中间件进行了详细介绍,希望对大家有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673570770bc820c5824e7240