你需要掌握的 Mongoose 中间件

阅读时长 4 分钟读完

什么是 Mongoose 中间件?

Mongoose 是 Node.js 下面用于连接 MongoDB 的一个库,它通过定义 model 来实现数据的 CRUD 操作。而 Mongoose 中间件就是在 model 操作前后添加一些自定义的逻辑操作,类似于 express 中间件在路由前后添加自定义的逻辑操作。Mongoose 中间件可以在数据保存、更新、查找等操作之前或之后加入一些逻辑改变数据的状态。

Mongoose 中间件分类

Mongoose 中间件分为前置中间件和后置中间件,前置中间件在操作前执行,后置中间件在操作后执行。而更特殊的中间件是文档中间件,文档中间件是指针对单个文档的中间件,在每个文档的 save、validate、remove 时都会触发。

中间件的使用

中间件的使用非常简单,只需在 model 定义后通过 prepost 方法定义中间件即可。例如:

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

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

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

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

前置中间件示例

在前置中间件中,我们可以修改一些数据的值或者添加一些校验操作。下面是一个示例:

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

上述代码中,我们使用 bcrypt 库对密码进行了 hash 生成,当密码被修改时,保存到数据库的就是 hash 后的密码。

后置中间件示例

在后置中间件中,我们可以对保存到数据库的数据进行日志记录或者触发其他操作。下面是一个示例:

上述代码中,当一个文档被保存到数据库中时,日志将记录下文档的 id。

文档中间件示例

文档中间件和前置后置中间件有一些区别,如可以访问文档本身,并在文档本身属性上执行逻辑操作。下面是一个示例:

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

上述代码中,当一个 User 被删除时,数据库中所有该 User 的 Post 也将被删除。

总结

Mongoose 中间件是一个非常实用的功能,它允许我们在 model 操作前或操作后添加一些自定义逻辑操作。中间件的分类有前置中间件、后置中间件和文档中间件。前置后置中间件可以用于日志记录、密码加密、校验等操作,而文档中间件在文档被操作时可以访问文档本身并执行逻辑操作。

掌握好 Mongoose 中间件的使用,能够让我们更好地理解和使用 Mongoose,提高开发效率和代码的可维护性。

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

纠错
反馈