Nest.js 中如何在模块中应用中间件?

推荐答案

在 Nest.js 中,可以通过以下步骤在模块中应用中间件:

  1. 创建中间件:首先,使用 @nestjs/common 中的 MiddlewareConsumerNestMiddleware 来创建自定义中间件。

    -- -------------------- ---- -------
    ------ - ----------- -------------- - ---- -----------------
    ------ - -------- --------- ------------ - ---- ----------
    
    -------------
    ------ ----- ---------------- ---------- -------------- -
      -------- -------- ---- --------- ----- ------------- -
        --------------------------
        -------
      -
    -
  2. 在模块中应用中间件:在模块的 configure 方法中使用 MiddlewareConsumer 来应用中间件。

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

    在这个例子中,LoggerMiddleware 将被应用到所有 cats 路由。

本题详细解读

中间件的作用

中间件是 Nest.js 中用于处理请求和响应的函数。它们可以在请求到达控制器之前或响应发送给客户端之前执行一些操作,例如日志记录、身份验证、数据验证等。

创建中间件

在 Nest.js 中,中间件是一个实现了 NestMiddleware 接口的类。NestMiddleware 接口要求实现 use 方法,该方法接收 Express 的 RequestResponseNextFunction 对象。

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

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

应用中间件

在模块中应用中间件需要使用 MiddlewareConsumerMiddlewareConsumer 提供了 applyforRoutes 方法,用于指定中间件和路由。

  • apply 方法用于指定要应用的中间件。
  • forRoutes 方法用于指定中间件应用的路由。
-- -------------------- ---- -------
------ - ------- ------------------- ---------- - ---- -----------------
------ - ---------------- - ---- ----------------------
------ - -------------- - ---- -------------------------

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

在这个例子中,LoggerMiddleware 将被应用到所有 cats 路由。

中间件的其他用法

  • 排除路由:可以使用 exclude 方法来排除某些路由。

  • 应用多个中间件:可以链式调用 apply 方法来应用多个中间件。

  • 全局中间件:可以使用 app.use 方法将中间件应用到所有路由。

通过这些方法,可以灵活地在 Nest.js 中应用中间件,以满足不同的需求。

纠错
反馈