express_get_use

express ,use,get区分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 假设有这样一个服务器
const express = require('express');
const server = express();

// 其路由设置为:
server.use('/api',(req,res,next) => {
console.log(req.url);
next();
console.log(req.url);
})

server.get('/api',(req,res,next) => {
console.log(req.url);
next();
console.log(req.url);
})
1. 假设请求的url为/api?id=10

服务器从上至下依次打印(顺序受next影响)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server.use('/api',(req,res,next) => {
// 第一个打印 ‘/?id=10’
console.log(req.url);
next();
// 最后一个打印 ‘/api?id=10’
console.log(req.url);
})

server.get('/api',(req,res,next) => {
// 第二个打印 ‘/api?id=10’
console.log(req.url);
next();
// 第三个打印 ‘同上’
console.log(req.url);
})

结论:server.use会对地址进行处理,截断已经匹配过的地址部分,但是在next()函数后会还原截断地址

2. 假设请求的path为/api/a.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server.use('/api',(req,res,next) => {
// 第一个打印 ‘/a.html’
console.log(req.url);
next();
// 第二个打印 ‘/api/a.html’
console.log(req.url);
})

server.get('/api',(req,res,next) => {
// 不打印
console.log(req.url);
next();
// 不打印
console.log(req.url);
})

结论: get方法是对请求的path进行全匹配,而use是对path进行开始部分匹配

3. 假设请求地址为/apia/a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server.use('/api',(req,res,next) => {
// 不打印
console.log(req.url);
next();
// 不打印
console.log(req.url);
})

server.get('/api',(req,res,next) => {
// 不打印
console.log(req.url);
next();
// 不打印
console.log(req.url);
})

结论: use 只对path的首个文件夹或文件进行匹配