koa-router如何像connect的路由一样使用?
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’,貌似也匹配不到