Express 快速入门

419 阅读4分钟

前言

Express 是基于 Node.js 平台,快速、开放、极简的 web 开发框架。也可以这么理解,Express 的作用和 Node.js 内置的 http 模块类似,是专门用来创建 web 服务器的。

Express 优势

http 模块用起来比较复杂,开发效率低,Express 是基于 http 模块进一步封装出来的,极大地提高了开发效率。

对于前端来说,最常见的两种服务器是:

  1. Web 网站服务器:专门对外提供 Web 网页资源的服务器

  2. API 接口服务器:专门对外提供 API 接口的服务器

使用 Express,可以方便快速创建 Web 网站服务器或 API 接口服务器。

托管静态资源

Express 提供了 express.static(),通过它可以非常方便地创建一个静态资源服务器。Express 在指定的静态目录中查找文件,并对外提供资源的访问路径,因此存放静态文件的目录名不会出现在 URL 中。

如果要托管多个静态资源目录,需多次调用 express.static(),访问静态资源文件时,express.static() 会根据目录的添加顺序查找文件。

Express 中的路由

在 Express 中,路由指的是 客户端的请求服务器处理函数 之间的映射关系。

路由模块化

  1. 创建路由模块对应的 .js 文件
  2. 调用 express.Router() 函数创建路由对象
  3. 向路由对象上挂载具体的路由
  4. 使用 module.exports 向外共享路由对象
  5. 使用 app.use() 函数注册路由模块

Express 中间件

中间件特指业务流程的中间处理环节。Express 中间件本质上就是一个 function 处理函数。

当一个请求到达 express 服务器后,可以连续调用多个中间件,从而对这次请求进行预处理。

注意:中间件函数的形参中必须包含 next 参数,而路由处理函数中只包含 req 和 res

next 函数的作用

next 函数是实现多个中间件连续调用的关键,它表示把流转关系转交给下一个中间件或路由。

全局生效的中间件

客户端发起的任何请求,到达服务器之后,都会触发的中间件,叫做全局生效的中间件。通过调用 app.use(中间件函数),即可定义一个全局生效的中间件。

多个中间件之间,共享同一份 req 和 res。我们可以在上游的中间件中,统一为 req 或 res对象添加自定义属性或方法,供下游的中间件或路由进行使用。

局部生效的中间件

不使用 app.use() 定义的中间件,叫做局部生效的中间件。

可以在路由中,通过如下两种方式,使用多个局部中间件:

app.get("/", f1, f2, ..., (req, res) => res.send("Home Page"));
app.get("/", [f1, f2, ...], (req, res) => res.send("Home Page"));

使用中间件的注意事项

  1. 一定要在路由之前注册中间件,除了错误级别的中间件
  2. 客户端发送过来的请求,可以连续调用多个中间件进行处理
  3. 执行完中间件的业务代码之后,不要忘记调用 next() 函数
  4. 为了防止代码逻辑混乱,next() 函数后不要再写额外的代码
  5. 连续调用多个中间件时,多个中间件之间共享 req 和 res 对象

中间件的分类

1. 应用级别的中间件

通过 app.use() 或 app.get() 或 app.post(),绑定到 app 实例上的中间件,叫做应用级别的中间件。

2. 路由级别的中间件

绑定到 express.Router() 实例上的中间件,叫做路由级别的中间件。

3. 错误级别的中间件

专门来捕获整个项目中发生的异常错误,从而防止项目异常崩溃的问题。错误级别中间件的 function 处理函数中有 4 个形参,分别是(err,req,res,next)。

4. Express 内置的中间件

自 Express 4.16.0 版本开始,Express 内置了 3 个常用的中间件,极大地提高了 Express 项目的开发效率和体验:

  • express.static 快速托管静态资源的内置中间件
  • express.json 解析 JSON 格式的请求体数据
  • express.urlencoded 解析 URL-encoded 格式的请求体数据
app.use(express.urlencoded({ extended: false }));

5. 第三方中间件

由第三方开发出来的中间件,叫做第三方中间件。例如在 Express 4.16.0 之前的版本中,经常使用 body-parser 这个第三方中间件来解析请求体数据。

app.use(parser.urlencoded({ extended: false }));

注意:express.urlencoded 中间件就是基于 body-parser 这个第三方中间件进一步封装出来的。

最后

以上就是笔者在学习 Express 过程中的一些记录,如果觉得对你有帮助的话,不要忘了点赞哟~