Express - 使用路由
1. 定义路由
app.METHOD(PATH, HANDLER);
// get 方法
app.get('/', (req, resp) => {
resp.send('GET method');
});
// post 方法
app.post('/', (req, resp) => {
resp.send('POST method');
});
// 匹配所有请求方法
app.all('/', (req, resp) => {
resp.send('reuest the home page');
});
Express 支持所有的HTTP请求方法
- get
- post
- head
- options
- delete
- put
- path
2. 路由路径
- 基于字符串的路由路径
app.get('/', (req, resp) => {
resp.send('home page');
});
app.get('/user', (req, resp) =>{
resp.send('user page');
});
- 基于字符串模式的路由路径
// match acd or abcd
app.get('/ab?cd', (req, resp) => {
resp.send('ab?cd');
});
// match abcd or abbcd abbbcd ...
app.get('/ab+cd', (req, resp) => {
resp.send('/ab+cd');
});
// match ad or abcd
app.get('/a(bc)?d', (req, resp) => {
resp.send('/a(bc)?d');
});
- 基于正则表达式的路由路径
// match have 'user' string path
app.get(/user/, (req, resp) => {
resp.send('/user/');
});
// match /admin
app.get(/^\/admin$/, (req, resp) => {
resp.send('^\/admin$/');
});
3. 路由参数
路由参数用于捕获url中的值,并将其存储在req.params对象中
// http://localhost:8080/users/2/timelines/3
app.get('/users/:userId/timelines/:timelineId', (req, resp) => {
//send { userId: '2', timelineId: '3'}
resp.json(req.params);
});
// 限制路由路径的userId 和 timelineId 为数字类型
app.get('/users/:userId(\\d+)/timelines/:timelineId(\\d+)', (req, resp) => {
//send { userId: '2', timelineId: '3'}
resp.json(req.params);
});
4. 路由函数
接收的url请求,匹配路由路径后就会执行路由函数
function(request, response, next)
- 单个路由函数
app.get('/', (req, resp) => {
resp.send('/');
});
- 多个路由函数
// 传递多个路由函数
app.get('/', (req, resp, next) => {
console.log(`${req.method} ${req.path}`);
next();
}, (req, resp) => {
resp.send('home page');
});
// 数组形式的路由函数
const logger = (req, resp, next) => {
console.log(`${req.method} ${req.path}`);
next();
};
const home = (req, resp) => {
resp.send('home page');
};
app.get('/', [logger, home]);
5. 公共路径路由
app.route('/user/login')
.get((req, resp) => {
resp.send('login page');
})
.post((req, resp) => {
resp.send('login handle');
});
6. 模块化路由
user.js module
const express = require('express');
const router = express.Router();
router.get('/login', (req, resp) => {
resp.send('login');
});
router.get('/register', (req, resp) => {i
resp.send('register');
});
module.exports = router;
timeline.js module
const express = require('express');
const router = express.Router();
router.get('/list', (req, resp) => {
resp.send('list');
});
module.exports = router;
index.js entry file
const express = require('express');
const app = express();
// 导入路由模块
const user = require('./user');
const timeline = require('./timeline');
// 设置路由前缀
app.use('/user', user);
app.user('/timeline', timeline);
// 开启监听
app.listen(8080, () => {
console.log('listen on 8080');
});