前言
Express 是基于 Node.js 平台,快速、开放、极简的 web 开发框架。也可以这么理解,Express 的作用和 Node.js 内置的 http 模块类似,是专门用来创建 web 服务器的。
Express 优势
http 模块用起来比较复杂,开发效率低,Express 是基于 http 模块进一步封装出来的,极大地提高了开发效率。
对于前端来说,最常见的两种服务器是:
-
Web 网站服务器:专门对外提供 Web 网页资源的服务器
-
API 接口服务器:专门对外提供 API 接口的服务器
使用 Express,可以方便快速创建 Web 网站服务器或 API 接口服务器。
托管静态资源
Express 提供了 express.static(),通过它可以非常方便地创建一个静态资源服务器。Express 在指定的静态目录中查找文件,并对外提供资源的访问路径,因此存放静态文件的目录名不会出现在 URL 中。
如果要托管多个静态资源目录,需多次调用 express.static(),访问静态资源文件时,express.static() 会根据目录的添加顺序查找文件。
Express 中的路由
在 Express 中,路由指的是 客户端的请求 与 服务器处理函数 之间的映射关系。
路由模块化
- 创建路由模块对应的
.js文件- 调用
express.Router()函数创建路由对象- 向路由对象上挂载具体的路由
- 使用
module.exports向外共享路由对象- 使用
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"));
使用中间件的注意事项
- 一定要在路由之前注册中间件,除了错误级别的中间件
- 客户端发送过来的请求,可以连续调用多个中间件进行处理
- 执行完中间件的业务代码之后,不要忘记调用
next()函数- 为了防止代码逻辑混乱,
next()函数后不要再写额外的代码- 连续调用多个中间件时,多个中间件之间共享
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 过程中的一些记录,如果觉得对你有帮助的话,不要忘了点赞哟~