CNode

koa-router如何像connect的路由一样使用?

PPerterPon发布于12 年前最后回复12 年前5 回复15766 浏览0 收藏

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)

P
PerterPon#1·12 年前

人工顶一把

T
Treri#2·12 年前

在m2中使用 yield next了吗?

P
PerterPon#3·12 年前
引用 Treri在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() );
T
Treri#4·12 年前
引用 Treri在m2中使用 yield next了吗?

@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里面的, 不会到/

P
PerterPon#5·12 年前
引用 Treri在m2中使用 yield next了吗?

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

参与回复
登录后即可参与回复。登录