2017-03-01 34 views
0

我有两个端点:Koa2同一路线不同PARAMS

通过ID得到所有用户

http.get(API_URL + "users/" + id) 

GET通过用户名的所有用户

http.get(API_URL + "users/" + username) 

我可以发送不同的参数在同一条路线上:

router.get("https://stackoverflow.com/users/:id", async ctx => { 
    //ctx.request.param is id 
    //do something 

}); 


router.get("https://stackoverflow.com/users/:username", async ctx => { 
    //ctx.request.param is username 
    //do something 
}); 

感谢您的帮助!

回答

2

在您的示例中,您提供的是URL参数,而不是(命名的)查询参数,因此它只是URL的一部分,所以无论如何这只是“一个字符串”。

这意味着,koa路由器然后将知道数据类型(例如integer对于:idstring对于:name)。这是 - 据我所知 - 并非如此。

当你有

"https://stackoverflow.com/users/:id" 

"https://stackoverflow.com/users/:username" 

你只要给URL字符串名称的这一部分 - 仅此而已。 (ctx.params.id OR ctx.params.username)

所以需要实现一个逻辑,在这里确定该参数是一个整数(和手柄是作为ID)或不(在这种情况下你把它当作用户名来处理)。

这可能看起来像:

router.get("https://stackoverflow.com/users/:id", async ctx => { 
    //ctx.request.id 
    if (!isNaN(ctx.request.id)) // it IS a number { 
     //do something with user ID 
    } else { 
     //do something with username 
    } 
}); 

希望是有道理的......否则,你真的要与distingiashable签名

0

简短的答案是没有创建两条路线。

我认为很好的解决方案,也许,你的路线设置这样

GET /users?<your query here> 

那么你可以用<your query>.id或查询> .username

查询用户