Express.js 中间件教程

阅读时长 6 分钟读完

什么是 Express.js 中间件

Express.js 是一个流行的 Node.js Web 应用框架,它支持路由、模板引擎、静态文件服务等功能。Express.js 中间件是一个特殊的函数,它可以在请求处理过程中,对请求对象和响应对象进行处理,从而实现一些有用的功能。

Express.js 中间件可以用于如下情况:

  • 记录请求日志
  • 认证用户身份
  • 解析请求数据
  • 做一些安全检查,防止攻击
  • 缓存某些请求结果
  • 动态生成一些公共数据

对于大型应用程序来说,中间件是非常有用的,因为它可以提高代码的重用性、可维护性和可扩展性。

中间件的使用方法

在 Express.js 中,中间件可以使用 app.use()router.use() 方法来添加。比如:

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

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

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

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

在上面的例子中,我们添加了一个简单的中间件,它会打印出请求时间。这个中间件会被任何请求处理函数之前执行。

注意,每个中间件函数都有三个参数:请求对象 req、响应对象 res 和下一个中间件函数 nextnext 是一个函数,当它被调用时,表示当前中间件已经执行完毕,需要将控制权交给下一个中间件或路由。

不仅仅是 app.use()router.use() 方法,还有很多其他的方法可以添加中间件,比如:

  • app.get()app.post() 等路由方法可以接受中间件作为参数
  • app.all() 方法可以匹配所有 HTTP 动词的请求,并且接受中间件作为参数
  • app.use()router.use() 方法可以添加多个中间件,它们会按照添加的顺序执行

中间件的分类

中间件可以分为以下几类:

应用级中间件

应用级中间件绑定到 app 对象上,并且会影响整个应用程序的行为。它们可以使用 app.use() 方法来添加。

比如:

路由级中间件

路由级中间件绑定到 router 对象上,只会影响特定的路由。它们可以使用 router.use() 方法来添加。

比如:

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

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

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

错误处理中间件

错误处理中间件可以捕获路由或中间件函数中抛出的异常,并且返回错误信息给客户端。错误处理中间件需要一个额外的参数,比如:

第三方中间件

除了自己编写中间件之外,还可以使用许多第三方中间件,比如:

  • body-parser:用于解析请求体中的数据。
  • compression:用于对响应数据进行压缩。
  • cors:用于跨域请求处理。
  • helmet:用于增强应用程序的安全性。

中间件的执行顺序

当多个中间件函数都绑定在同一个路由上时,它们的执行顺序是非常重要的。Express.js 中间件的执行顺序可以分为如下几类:

先执行应用级中间件,后执行路由级中间件

比如:

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

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

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

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

当处理 /users 路由时,控制权将首先交给 app.use() 绑定的第一个中间件函数。然后,控制权交给 app.use() 绑定的第二个中间件函数。最后,控制权交给 router.use() 绑定的中间件函数,然后才会执行 /users 路由的处理函数。

先执行错误处理中间件,后执行普通中间件

比如:

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

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

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

当处理任何路由时,如果 app.use() 绑定的中间件函数抛出错误,将会直接跳转到错误处理中间件,而不会去执行其它的中间件函数或路由处理函数。

中间件函数中使用异步操作

中间件函数中经常会使用异步操作,比如从数据库中读取数据、发送 HTTP 请求等。为了正确地处理异步操作,中间件函数必须使用 next() 函数来通知 Express.js,控制权可以传递给下一个中间件函数或路由处理函数。

比如:

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

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

当处理 /users 路由时,控制权将首先交给 app.use() 绑定的第一个中间件函数。然后,控制权将在异步操作完成后,才会交给 /users 路由的处理函数。

总结

Express.js 中间件是一个非常有用的功能,它可以提高代码的重用性、可维护性和可扩展性。通过本教程,您应该了解了以下内容:

  • 中间件的使用方法和分类
  • 中间件的执行顺序和异步操作
  • 一些常用的第三方中间件

在编写 Express.js 应用程序时,您应该熟悉中间件的用法,这样才能编写出更加健壮、可维护的代码。

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

纠错
反馈