koa-router的使用以及模块化处理

背景

在我们使用koa-router的时候, 随着项目业务模块增加, 路由也会随之增加, 这时我们就需要将这些路由模块化管理起来, 增加可读性和减少后续维护成本~下面来谈谈我对koa-router的理解......另外, 本文适合了解koa基础的同学学习

koa-router

使用

  1. 安装
npm i koa-router
  1. 用法
  • 基本用法
const Router =  require('koa-router');

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

router.get('/', (ctx, next) => {
  // ctx.router available
});

app
  .use(router.routes())
  .use(router.allowedMethods());
  • 添加路由前缀

方式一: 在实例化koa-router的时候, 传入参数

const router = new Router({prefix:'前缀名称'});

方式二:用router示例提供的方法添加前缀

router.prefix('前缀名称')
  • 命名路由
    可以指定路由名称, 并可用携带参数的路由,可以写中间件处理,ctx为koa上下文, next为下一个中间件函数
router.get('user', '/users/:id', (ctx, next) => {
 // ...
});

router.url('user', 3);
// => "/users/3"
  • 路由url获取参数
    命名路由的参数会由ctx.params捕获到
router.get('/:category/:title', (ctx, next) => {
  console.log(ctx.params);
  // => { category: 'programming', title: 'how-to-node' }
});
  • 从url模式生成URL并给出params
const url = Router.url('/users/:id', {id: 1});
// => "/users/1"

路由模块化

  • 在项目根目录整一个routes文件夹,下面根据功能模块新建路由文件
    routes目录结构

    贴一个common-routers.js的代码:
const router = require('koa-router')();
router.prefix("/common");
const common = require('../controllers/common');

// 获取用户信息
router.get('/getUserInfo', common.getUserInfo);
// 获取系统权限信息
router.get('/getPermission', common.getPermission);

module.exports = router.routes();
  • 然后整一个router.js文件,代码如下
const router = require('koa-router')();

/**
 * koa路由模块化处理
 * 所有路由请按功能模块写在./routers文件夹中,并统一在该文件引入功能模块的路由
 */

//  业务模块1
const moduleA = require('./routes/业务模块1');

//  业务模块2
const moduleB = require('./routes/业务模块2');

// 业务模块3
const moduleC = require('./routes/业务模块3');

router.use(moduleA).use(moduleB).use(moduleC);

// Export router
module.exports = router;
  • 最后在项目的入口文件引入router.js
const Koa = require('koa');
//此处省略很多, 如配置服务器端口,ip,中间件等......
const app = new Koa();
// 路由
const router = require('./router');
app.use(router.routes())
  .use(router.allowedMethods());

解析路由参数

  1. get请求可直接从koa的上下文获取
ctx.request.query

2.post请求一般会使用koa-body工具包解析

多个中间件处理

在项目中往往中间件业务逻辑里有些前置或者后置处理, 这时koa路由支持我们绑定多个中间件:

   router.post(
      '/xxx', //路径
      // 按顺序绑定中间件
      中间件函数1, // 查询权限
      中间件函数2, // 调用功能逻辑函数
      中间件函数3, //监控上报
    );

在每个中间件我们要注意对next的处理.

一个请求中不同中间件共享数据

可以使用koa中上下文的state属性存储起来

// ctx.state.key= value;
 ctx.state.reqStart = reqStart;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容