Node.js 系列: 中间件(Middleware)

90 阅读3分钟

中间件

中间件 : [应用系统] 和 [系统软件] 之间的 一个类软件

在Node中的作用:

NodeJS中,中间件主要是指封装http请求细节处理的方法

以 Express 框架为例,当一个请求到达服务器时,会先经过一系列配置好的中间件。

  • 中间件可以对请求进行各种操作,比如
    • 检查请求头(如验证用户身份的信息)、

    • 解析请求体(像把 JSON 格式的数据解析出来方便后续处理),

    • 还能在请求处理过程中添加一些通用的数据到请求对象中。

    • 同时,它也可以对响应进行操作,比如添加一些响应头信息,或者修改响应数据等。

中间件的优势:

在于可以将复杂的请求处理逻辑拆分成多个小的、可复用的部分,使得代码更易维护和扩展。

目的:资源共享,功能共享,功能扩展

常用的中间件

例如在expresskoa等web框架中,中间件的本质为一个回调函数,参数包含请求对象、响应对象和执行下一个中间件的函数

Express 中间件

  • body - parser:用于解析传入的请求体。
    • 它能处理application/x - www - form - urlencoded和application/json等格式的数据,让你可以方便地在请求处理函数中获取 POST 请求的数据。
  • cookie - parser:用于解析Cookie头信息,
    • 把Cookie数据解析成易于访问的对象,有助于在应用中处理用户相关的会话信息。
  • morgan:这是一个日志中间件。
    • 它可以将请求的相关信息(如请求方法、路径、响应状态码等)记录到控制台或者文件中,方便开发者查看请求情况。

Koa 中间件

  • koa - router:用于定义路由。
    • 它可以帮助你将不同的 URL 路径和对应的处理函数组织起来,清晰地构建 Web 应用的接口。
  • koa - bodyparser:和 Express 中的body - parser类似,
    • 用于解析请求体中的数据。

node框架:Koa

koa是基于NodeJS当前比较流行的web框架,本身支持的功能并不多,功能都可以通过中间件拓展实现。通过添加不同的中间件,实现不同的需求,从而构建一个 Koa 应用

洋葱圈模型

每次执行下一个中间件传入两个参数:

  • ctx :封装了request 和 response 的变量
  • next :进入下一个要执行的中间件的函数

第三方中间件

  • koa-bodyparser
    • 是将我们的 post 请求和表单提交的查询字符串转换成对象,并挂在 ctx.request.body 上,方便我们在其他中间件或接口处取值
  • koa-static:中间件的作用是在服务器接到请求时,帮我们处理静态文件

总结

在实现中间件时候,单个中间件应该足够简单,职责单一,中间件的代码编写应该高效,必要的时候通过缓存重复获取数据

koa本身比较简洁,但是通过中间件的机制能够实现各种所需要的功能,使得web应用具备良好的可拓展性和组合性

通过将公共逻辑的处理编写在中间件中,可以不用在每一个接口回调中做相同的代码编写,减少了冗杂代码,过程就如装饰者模式