0

我有两个端点:

按 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
});

谢谢你的帮助!

4

2 回答 2

2

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

这意味着,koa 路由器将知道数据类型(例如integerfor:idstringfor :name)。据我所知,情况并非如此。

当你有

"/users/:id" 

或者

"/users/:username"

您只需为 URL 字符串的这一部分命名 - 仅此而已。(ctx.params.idctx.params.username)

因此,您需要实现一个逻辑,在其中确定参数是否为整数(句柄为 ID)或不是(在这种情况下,您将其作为用户名处理)。

这可能看起来像这样:

router.get("/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
    }
});

希望这是有道理的......否则,你真的必须创建两条具有可区分签名的路线

于 2017-03-08T12:24:43.773 回答
0

简短的回答是否定的。

我认为好的解决方案可能是你的路线设置是这样的

GET /users?<your query here>

然后您可以使用<your query>.id或 query>.username查询您的用户

于 2017-03-21T02:26:30.080 回答