介绍
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