@koa/router 分路由

 

在 Koa2 中使用 @koa/router 进行路由拆分(模块化)是保持项目结构清晰、易于维护的最佳实践。以下是实现分路由的完整步骤和代码示例:

1. 安装依赖

首先确保安装了路由中间件和 body 解析器:

bash
 
npm install @koa/router koa-bodyparser

2. 创建子路由模块

建议在项目根目录下创建 routes 文件夹,将不同业务模块的路由拆分为独立的文件。

‌示例:创建 routes/user.js (用户模块)‌

javascript
 
const Router = require('@koa/router'); const router = new Router({ prefix: '/users' }); // 可选:设置该模块统一前缀 // 获取所有用户 router.get('/', async (ctx) => { ctx.body = { code: 200, msg: 'success', data: [ { id: 1, name: '张三' }, { id: 2, name: '李四' } ] }; }); // 用户登录 router.post('/login', async (ctx) => { const { username, password } = ctx.request.body; if (username === 'admin' && password === '123456') { ctx.body = { code: 200, msg: '登录成功', token: 'xyz-token' }; } else { ctx.status = 401; ctx.body = { code: 401, msg: '用户名或密码错误' }; } }); module.exports = router;

‌示例:创建 routes/product.js (商品模块)‌

javascript
 
const Router = require('@koa/router'); const router = new Router({ prefix: '/products' }); router.get('/', async (ctx) => { ctx.body = { code: 200, data: [{ id: 101, title: 'iPhone 17' }] }; }); module.exports = router;

3. 在主应用中组装路由

在入口文件(如 app.jsindex.js)中,引入子路由并使用主路由实例进行挂载。

javascript
 
const Koa = require('koa'); const Router = require('@koa/router'); const bodyParser = require('koa-bodyparser'); // 引入子路由 const userRoutes = require('./routes/user'); const productRoutes = require('./routes/product'); const app = new Koa(); const router = new Router(); // 注册 body 解析中间件 (处理 POST 请求数据必备) app.use(bodyParser()); // --- 路由组装方式一:直接挂载子路由到主路由 --- // 注意:如果子路由定义了 prefix,这里可以直接 use router.use(userRoutes.routes(), userRoutes.allowedMethods()); router.use(productRoutes.routes(), productRoutes.allowedMethods()); // --- 路由组装方式二:在主路由上指定前缀 --- // 如果子路由没写 prefix,可以在这里统一加前缀 // router.use('/api/v1', userRoutes.routes(), userRoutes.allowedMethods()); // 将主路由注册到 Koa 应用 app.use(router.routes()); app.use(router.allowedMethods()); // 处理 OPTIONS 预检请求等 app.listen(3000, () => { console.log('Server is running on http://localhost:3000'); });

核心要点说明

  1. allowedMethods()‌:务必配合 routes() 一起使用。它会自动处理 HTTP 方法不允许的情况(例如只定义了 GET 却发了 POST),并自动响应 OPTIONS 预检请求,这对前后端分离项目至关重要。
  2. prefix 的使用‌:
    • 可以在创建子 Router 实例时设置 prefix(如 /users)。
    • 也可以在主路由 router.use() 时指定前缀(如 /api/v1)。
    • 两者可以叠加,例如主路由前缀 /api + 子路由前缀 /users = 最终路径 /api/users
  3. koa-bodyparser‌:处理 POST/PUT 请求体时必须引入此中间件,否则 ctx.request.body 将为 undefined
  4. ‌模块化导出‌:每个子路由文件最后必须通过 module.exports = router 导出路由实例,以便主应用引用。

通过这种方式,你可以轻松地将大型应用拆分为用户、订单、商品等多个独立模块,便于团队协作和代码管理。

posted on 2026-05-30 21:54  漫思  阅读(12)  评论(0)    收藏  举报

导航