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');
});
posted @ 2022-02-19 14:49  箫笛  阅读(198)  评论(0)    收藏  举报