【问题标题】:Koa2 Same Route Different ParamsKoa2 相同的路线不同的参数
【发布时间】:2017-03-01 17:55:46
【问题描述】:

我有两个端点:

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

感谢您的帮助!

【问题讨论】:

    标签: koa koa2


    【解决方案1】:

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

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

    当你有

    "/users/:id" 
    

    "/users/:username"
    

    您只需为 URL 字符串的这一部分命名 - 仅此而已。 (ctx.params.id ctx.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
        }
    });
    

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

    【讨论】:

      【解决方案2】:

      简短的回答是否定的。

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

      GET /users?<your query here>
      

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

      【讨论】:

        猜你喜欢
        • 2018-06-08
        • 2018-06-12
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 2020-12-03
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多