express系列(4)中间件(未完成)

原生 Node 的单一请求处理函数,随着功能的扩张势必会变的越来越难以维护。

Express 框架则可以通过中间件的方式按照模块和功能对处理函数进行切割处理。这样拆分后的模块不仅逻辑清晰,更重要的是对后期维护和开发非常有利。

本文将会详细介绍 Express 的使用,其中主要内容包括:

  • 中间件是什么?
  • 中间件栈以及请求处理的工作流。
  • 中间件的使用。
  • 如何实现自己的中间件。
  • Express 中常用的第三方中间件。

希望在读完本文后,你能对这个 Express 最主要的构成有更加清晰的认知。

中间件和中间件栈

对所有的 Web 应用来说它的处理流程可以简单描述为:监听请求、解析请求、做出响应。

04_0104_01

与原生 Node 代码不同的是,Express 会将上图中的最后一部分拆分为一组中间件函数(中间件栈)。所以Express 的工作流大致如下:

04_0204_02

Express 中的中间件栈函数中除了表示请求和响应的参数外,还添加了第三个参数。该参数是一个函数对象,按照惯例我们称之为 next 。它用于传递中间件栈对某个请求的处理流。

04_03 

在整个中间件栈的处理流中,最少有一个函数需要调用 res.end 方法结束响应处理。

下面我们通过搭建静态文件服务来加深对中间件栈的理解。

示例:一个静态文件服务器

创建一个文件夹并为此提供静态文件服务。你可以在文件夹中存放任何文件。最终所有的这些文件都能通过示例程序进行网络访问。

该示例程序的功能大致包括:能够正确返回存在的文件;文件不存在时返回 404 错误;打印所有的访问请求。所以,该示例的中间件栈如下:

  1. 日志记录中间件。该函数会在终端打印所有的网络请求,并在打印介绍后继续下一个中间件函数。
  2. 静态文件发送中间件。如果访问的文件存在则返回给客户端。如果文件不存在则会跳到错误处理中间件。
  3. 404 处理中间件。如果文件不存在的话,该中间件将会给客户端发送 404 错误信息。

流程图如下:

04_04

下面我们就进行代码实现

准备工作

与之前一样,新建工程目录并将下面内容复制到 package.json 中:

{
    "name": "static-file-fun", 
    "private": true, 
    "scripts": {
        "start": "node app.js" 
    }
}

接下来,我们执行 npm install express --save 安装最新版 Express 。

确保安装完成后,我们在工程目录里新建文件夹 static 并在其中存放一些文件。

我们新建工程主入口文件 app.js

工程的大致目录如下:

另外,值的一提的是之所以配置 npm start 命令,既是因为开发约定,更重要的是让其他人开箱即用,无需自己手动查找程序入口。

猜你喜欢

转载自www.cnblogs.com/magicg/p/12806423.html
今日推荐