Skip to content
On this page

koa-router

简介

koa-router 是 Koa 的一个强大的路由中间件,它提供了完整的路由功能,支持请求方法、URL 参数、嵌套路由等特性,使得 API 的开发更加灵活和直观。

安装

bash
npm install @koa/router

基本使用

javascript
const Koa = require('koa');
const Router = require('@koa/router');

const app = new Koa();
const router = new Router();

// 基本路由
router.get('/', ctx => {
  ctx.body = 'Hello World';
});

// 带参数的路由
router.get('/users/:id', ctx => {
  ctx.body = `User ${ctx.params.id}`;
});

// 注册路由中间件
app.use(router.routes());
app.use(router.allowedMethods());

高级特性

1. 路由前缀

javascript
const router = new Router({
  prefix: '/api'
});

2. 多层嵌套路由

javascript
const userRouter = new Router({
  prefix: '/users'
});

userRouter
  .get('/', ctx => { /* 获取用户列表 */ })
  .post('/', ctx => { /* 创建新用户 */ })
  .get('/:id', ctx => { /* 获取特定用户 */ });

// 嵌套路由
router.use(userRouter.routes(), userRouter.allowedMethods());

3. 路由中间件

javascript
const auth = async (ctx, next) => {
  if (!ctx.state.user) {
    ctx.status = 401;
    return;
  }
  await next();
};

router.get('/protected', auth, ctx => {
  ctx.body = '受保护的资源';
});

4. 命名路由

javascript
router.get('user', '/users/:id', ctx => {
  ctx.body = `User ${ctx.params.id}`;
});

// 生成 URL
router.url('user', { id: 3 }); // => "/users/3"

5. 多种请求方法

javascript
router
  .get('/users', ctx => { /* GET 请求处理 */ })
  .post('/users', ctx => { /* POST 请求处理 */ })
  .put('/users/:id', ctx => { /* PUT 请求处理 */ })
  .delete('/users/:id', ctx => { /* DELETE 请求处理 */ });

6. 路由组

javascript
router.use('/admin', adminAuth, adminRouter.routes());

配置选项

  • prefix: 路由前缀
  • methods: 支持的 HTTP 方法
  • sensitive: 区分大小写,默认 false
  • strict: 严格模式,默认 false
  • routerPath: 自定义路由路径

注意事项

  1. 总是在路由注册后使用 allowedMethods() 中间件
  2. 合理使用路由前缀和嵌套路由组织代码结构
  3. 注意路由的注册顺序,更具体的路由应该放在前面
  4. 适当使用中间件来处理通用逻辑
  5. 使用命名路由可以更方便地维护 URL
  6. 正确处理路由错误,提供友好的错误响应
  7. 考虑使用路由中间件进行权限控制和参数验证

要保持清醒 永远不抱有意外的幻想 凭空的期待最要命