koa-router如何像connect的路由一样使用?
发布于 7个月前 作者 PerterPon 646 次浏览

RT,比如在connect下的如下代码:

app.use( '/', m1 );
app.use( '/test', m2 );
app.use( '/test', m3 );

请求URL为: xxx.com/test 这个时候会依次流过m1,m2, m3

但是在koa-router中,貌似只会直接流向m2,不会经过m1,也不会到m3,还看到有个koa-mount的库,貌似是配合koa-router用的,刚开始倒腾koa,请问下各位,如果要实现在connect中的功能,koa中应该如何写呢?

5 回复

在m2中使用 yield next了吗?

我看貌似有两种使用方式,还有混合的,比如

  • 这是第一种
var app = koa()
app.use( router( app ) );
app.get( '/test', m1 );
app.get( '/test', m2 );
  • 第二种,m1里面yield next;能够流到M2,但是对于xxx.com/test,这种请求,不会流到M3,要做些鉴权什么的,就会比较麻烦。
var app = koa();
var Router = require( 'koa-router' )
var routerV1 = new Router()
var routerV2 = new Router()
var routerV3 = new Router()
routerV1.get( '/test', m1 );
routerV2.get( '/test', m2 );
routerV3.get( '/', m3 );
app.use( routerV3.middleware() );
app.use( routerV1.middleware() );
app.use( routerV2.middleware() );

@PerterPon 第二种方法没用过, 我都是使用第一种方法, 如果你想要同一个路径里面有多个middleware的话, 可以使用 app.get('/test’, m1, m2)这种, 在m1里面使用yield next就能流到m2了.

匹配/test后再匹配/, 这种用法没有用到过啊

var koa = require('koa')
    , router = require('koa-router')
    , app = koa()
    ;

app.use(router(app));

app.get('/test', function *(next){
    console.log('test1');
    yield next;
}, function *(next){
    console.log('test2');
    yield next;
});

app.get('/', function *(next){
    console.log('root path');
    yield next;
});

app.listen(3000);

这里只会匹配到/test里面的, 不会到/

@Jeremial = =。。。这个是看USE的顺序的吧,我先USE了M3,可能你看错了,就算是先use '/’,再 use '/test’,貌似也匹配不到

回到顶部