什么是express
Express是专门用来床架web服务器的。
安装Express
npm命令:
1 | npm install express@4.17.1 |
Express的基本使用
- 导入express
- 创建web服务器
- 调用listen(端口,回调函数),启动服务器
监听客户端的GET与POST请求
通过.get()方法可以监听客户端的GET请求:
这个函数接受两个参数,第一个参数为请求地址,第二个参数为回调函数。
1 | const express = require('express'); |
通过.post()方法监听客户端的POST请求。
参数与get一致。
1 | const express = require('express'); |
获取URL中携带的查询参数
通过req.query对象可以访问到客户端查询字符串的形式,也就是发到服务器的参数。
默认情况下req.query是一个空对象。
获取URL中的动态参数
通过req.params获取到URL中的动态参数
Express向外托管静态资源
使用express.static(文件夹地址)创建一个静态资源服务器。
注意express在指定的静态目录中查找文件,并且对外提供资源的访问路径,所以静态文件的目录名不会出现在URL中。
托管多个静态资源目录
多次调用express.static(文件夹地址)函数就可以了。
在访问静态资源文件的时候,express.static函数会根据目录的添加顺序所需的文件。
挂载路径前缀
在静态资源访问路径之前,挂载路径前缀。
1 | server,use('/public',express.static('./public')); |
nodemon
项目热更新。
Express的路由
Express中的路由由三部分组成:
- 请求的类型
- 请求的URL
- 处理函数
1 | server.method(url,function); |
注意
- 按照定义路由的先后顺序进行匹配
- 只有当请求类型与请求URL都匹配时,才会执行处理函数
模块化路由
- 创建路由对应的js文件
- 调用express.Router()函数创建路由对象
- 向路由对象上挂载具体的路由
- 使用module.exports向外共享路由对象
- 使用server.use()函数注册路由模块
路由模块添加前缀
1 | server.use('/api', userRouter); |
express中间件
express中间件调用流程
当一个请求到达Express服务器之后,可以连续调用多个中间件,来对这次请求进行预处理。
express中间件格式
中间价本质是一个function处理函数,Express中间件格式为:
1 | server.get('/',function(req.res.next()){ |
中间价函数的形参列表之中,必须包含一个next()函数(放到最后),而路由函数中,只有req,res两个参数。
next函数的作用
next函数是实现多个中间件连续调用的关键,负责将流转关系交给下一个中间价或者路由。
定义中间件函数
1 | const express = require('express'); |
全局生效的中间件
客户端发起的任何请求,到达服务端之后,都会触发的中间件,这就是全局生效的中间件。
使用server.use(中间件函数)就可以注册为全局生效的中间件。
定义中间件的简化形式
1 | const express = require('express'); |
中间件的作用
多个中间件之间共享同一份req与res,也就是我们可以在上游的中间件统一为req或者res添加一些自定义的属性或者方法,并且供下游中间件或者路由使用。
中间件的分类
- 应用级别的中间件
- 路由级别的中间件
- 错误级别的中间件
- Express级别的中间件
- 第三方的中间件
使用CORS中间件解决跨域问题
CORS是一个第三方的中间件,使用步骤
- 安装
- 使用require导入
- 在路由之前配置中间件
CORS响应头部:Access-Control-Allow-Origin
Access-Control-Allow-Origin:<origin>|*
其中origin参数的值决定了允许访问该资源的外部URL地址。
如果origin的值为*,那么久代表任何URL都可以请求这个接口。
CORS响应头部:Access-Control-Allow-Headers

如果客户端发送了额外的请求头,就需要在服务端使用Access-Control-Allow-Headers对请求头进行声明,否则请求就会失败。