Express.js 中间件完全指南:使用和创建基本教程

阅读时长 6 分钟读完

介绍

Express.js 是一个流行的 Node.js web 框架, 它提供了一种简单易用的方式来构建 web 应用程序。其中一个最关键的特性就是它的中间件 (middleware) 系统, 它允许开发者创建轻量可重用组件用以处理 HTTP 请求和响应,从而使应用的开发更加快捷、高效、可定制。本文将会深入讲解 Express.js 中间件系统,包括中间件基础知识、中间件使用、中间件的创建和中间件的组合方式。

中间件基础知识

中间件就是一个函数,英文叫做 middleware,它的作用是处理一个请求和响应。在 Express.js 中,请求(request)和响应(response)都是可以被修改的对象,中间件可以在这两个对象上进行操作和增强。中间件函数有三个参数,分别是 request 对象、response 对象和 next 函数,其中 next 函数的作用是将请求传递给下一个中间函数。

例如,以下代码展示了一个简单的中间件处理请求并打印请求的 URL:

如果想在中间件使用时止住请求传递给下一个中间件,可以使用 res.end() 函数,例如:

中间件的使用

Express.js 中间件可以在应用程序或路由级别使用,使用 app.use 或 app.METHOD 函数来将中间件应用到应用程序或路由处理程序中。

中间件的执行顺序是在路由处理之前,顺序为按顺序添加的顺序执行。因为这个原因,中间件可以用于所有路由,也可以在路由级别使用。

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

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

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

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

以上示例展示了将中间件应用于特定路由(/api),中间件打印出一条消息 'Middleware executed',app.get 和 app.post 处理分别是 'Users list was requested' 和 'User was created'。这个例子显示中间件可以根据需要部署到应用程序中的任意位置,以便在指定的路由上使用。

中间件的创建

在 Express.js 中,如果想使用自己的中间件,可以写一个函数,并在应用程序中使用 app.use 函数将中间件传递给代码库。自己编写的中间件时,应该确保中间件函数调用 next() 函数以使 Express.js 继续执行请求响应周期。

示例中间件 - 过滤器:

以上示例中,只有在查询字符串中包含 "name=Tom" 时,中间件拒绝向客户端发送请求结果。通过这种方法中间件函数可以与 Express.js 请求和响应逻辑无缝集成,从而让程序具有更高的可重用性。

中间件的组合方式

中间件可以根据需要组合在一起,以满足应用程序的特定要求。在 Express.js 中,组合中间件的方法有以下两种:

  • 基于 route 的中间件组合
  • 基于全局或局部中间件的组合

基于 route 的中间件组合

当必须在同一路由下使用多个中间件时,可以使用基于 route 的中间件组合方式。基于 route 的中间件组合使用 app.METHOD(path, [callback, ...callbacks]) 声明路由并添加单个或多个中间件函数作为参数。

以上代码使用 app.get 声明该路由,然后是两个中间件函数,一个是 authCheck,一个是请求处理程序。Express.js 会在'authCheck' 中间件返回调用 next() 函数之前阻止执行所有路由处理程序。

基于全局或局部中间件的组合

使用全局或局部中间件,可以让多个路由共享单个中间件。全局中间件被定义在 app.js 的顶部和底部。顶部的中间件在每个路由调用之前运行,而底部的中间件在每个路由调用之后运行。

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

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

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

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

在以上示例中,'Global middleware' 会在每个路由调用之前运行,而 'getBooks middleware' 仅在 '/api/books' 路由调用之前运行。

局部中间件可以通过向 app.METHOD 函数添加中间件参数来添加。一旦添加,可以用于任何特定的路由,覆盖全局中间件的值。

结论

本文深入讲解了 Express.js 中间件的使用和创建,包括中间件基础知识、中间件使用、中间件的创建和中间件的组合方式。通过这篇文章的学习,希望各位读者能够更加深入地理解 Express.js 中间件的处理逻辑,运用好这个异常强大的功能,减少开发工作量,提高应用程序的可重用性。

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

纠错
反馈