Koa2相同的路线不同的参数

时间:2017-03-01 17:55:46

标签: koa koa2

我有两个端点:

按ID获取所有用户

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

按用户名获取所有用户

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

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

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

});


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

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

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

这意味着,koa路由器将知道数据类型(例如integer的{​​{1}}和:id的{​​{1}}。这是 - 据我所知 - 并非如此。

当你有

string

:name

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

所以你需要实现一个逻辑,你可以确定参数是否是一个整数(并且句柄是一个ID)(在这种情况下你将它作为用户名处理)。

这可能是这样的:

"/users/:id" 

希望有意义......否则,你真的必须创建两个带有distingiashable签名的路由

答案 1 :(得分:0)

简短的回答是否定的。

我认为好的解决方案可能是,您的路线设置如下

GET /users?<your query here>

然后您可以使用<your query>.id或查询&gt; .username

查询您的用户