什么是express

Express是专门用来床架web服务器的。

安装Express

npm命令:

1
npm install express@4.17.1

Express的基本使用

  1. 导入express
  2. 创建web服务器
  3. 调用listen(端口,回调函数),启动服务器

监听客户端的GET与POST请求

通过.get()方法可以监听客户端的GET请求:

这个函数接受两个参数,第一个参数为请求地址,第二个参数为回调函数。

1
2
3
4
5
6
7
8
9
10
11
	const express = require('express');

const server = express();

server.get('/', (req, res) => {
console.log(`监听到来自${req.url}的GET请求`);
});

server.listen('8080', function () {
console.log('服务启动:http://127.0.0.1:8080');
})

通过.post()方法监听客户端的POST请求。

参数与get一致。

1
2
3
4
5
6
7
8
9
10
11
12
13
const express = require('express');

const server = express();

server.post('/login', (req, res) => {
console.log(`监听到来自${req.url}的GET请求`);
res.setHeader('Content-Type', 'text/html;charset=utf-8')
res.end(`监听到来自${req.url}的POST请求`);
});

server.listen('8080', function () {
console.log('服务启动:http://127.0.0.1:8080/login');
})

获取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中的路由由三部分组成:

  1. 请求的类型
  2. 请求的URL
  3. 处理函数
1
server.method(url,function);

注意

  1. 按照定义路由的先后顺序进行匹配
  2. 只有当请求类型与请求URL都匹配时,才会执行处理函数

模块化路由

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

路由模块添加前缀

1
server.use('/api', userRouter);

express中间件

express中间件调用流程

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

express中间件格式

中间价本质是一个function处理函数,Express中间件格式为:

1
2
3
server.get('/',function(req.res.next()){
next();
})

中间价函数的形参列表之中,必须包含一个next()函数(放到最后),而路由函数中,只有req,res两个参数。

next函数的作用

next函数是实现多个中间件连续调用的关键,负责将流转关系交给下一个中间价或者路由。

定义中间件函数

1
2
3
4
5
6
7
8
9
10
11
12
const express = require('express');

const server = express();

const mv = function (req, res, next) {
console.log('这是一个中间件函数');
next()
}

server.listen('8080', () => {
console.log('服务启动:http://127.0.0.1:8080');
})

全局生效的中间件

客户端发起的任何请求,到达服务端之后,都会触发的中间件,这就是全局生效的中间件。

使用server.use(中间件函数)就可以注册为全局生效的中间件。

定义中间件的简化形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const express = require('express');
const userRouter = require('./Router');
const server = express();


server.use(function (req, res, next) {
console.log('这是一个中间件函数');
next()
});

server.use(userRouter);

server.listen('8080', () => {
console.log('服务启动:http://127.0.0.1:8080');
})

中间件的作用

多个中间件之间共享同一份req与res,也就是我们可以在上游的中间件统一为req或者res添加一些自定义的属性或者方法,并且供下游中间件或者路由使用。

中间件的分类

  1. 应用级别的中间件
  2. 路由级别的中间件
  3. 错误级别的中间件
  4. Express级别的中间件
  5. 第三方的中间件

使用CORS中间件解决跨域问题

CORS是一个第三方的中间件,使用步骤

  1. 安装
  2. 使用require导入
  3. 在路由之前配置中间件

CORS响应头部:Access-Control-Allow-Origin

Access-Control-Allow-Origin:<origin>|*

其中origin参数的值决定了允许访问该资源的外部URL地址。

如果origin的值为*,那么久代表任何URL都可以请求这个接口。

CORS响应头部:Access-Control-Allow-Headers

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