Skip to content
On this page

koa路由

koa是个极简的web框架,简单到连路由模块都没有配备,多个页面在koa中要这么写:

javascript
app.use(function *(){
        //我是首页
        if(this.path==='/'){
        
        }
    });
    
    app.use(function *(){
        //我是详情页
        if(this.path==='/detail'){
        
        }
    });

这么挫的写法,显然无法支撑真正的业务应用(工具、功能模块这么写是没问题的)。

我们需要引入个路由中间件 koa-router ,有了 koa-router 我们就可以像写 express 路由一样,写 koa 应用页面:

注入 koa-router 中间件:

javascript
var router = require('koa-router');
    app.use(router(app));

简单的路由写法:

javascript
app.get('/', function *(next) {
        //我是首页
        //this 指向请求
    });
    app.get('/detail/:id', function *(next) {
        //我是详情页面
        //:id 是路由通配规则,示例请求 /detail/123 就会进入该 generator function 逻辑
        var id = this.params.id; //123
    });

除了最常用的get()外,还有 post() 、put() 、patch() 、delete(),后面会结合具体业务场景讲解。

koa-router 拥有丰富的 api 细节,用好这些 api ,可以让页面代码更为优雅与可维护。

比如 param() 方法,用于路由参数的处理:

javascript
app.param('id',function *(id,next){
        this.id = Number(id);
        if ( typeof this.id != 'number') return this.status = 404;
        yield next;
    }).get('/detail/:id', function *(next) {
        //我是详情页面
        var id = this.id; //123
        this.body = id;
    });

param() 用于封装参数处理中间件,当访问 /detail/:id 路由时,会先执行 param() 定义的 generator function 逻辑。

函数的第一个是路由参数的值,next 是中间件流程关键标识变量。

yield next;

表示执行下一个中间件。

通过 param() ,我们可以把参数的处理给抽象出来。