2017-03-01 16 views
0

は、私は2つのエンドポイントがあります。Koa2同じルート異なるのparamsに

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

は、ユーザー名

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

ですべてのユーザーが、私は異なるパラメータを送ることができますGET IDですべてのユーザーをGET同じルート上:

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文字列名のこの部分を与えます。

だからあなたはパラメータが整数であるかどうかを判断する(とハンドルがIDとしてある)か否か(ここで、ロジックを実装する必要があります(OR ctx.params.usernameをctx.params.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署名を持つ2つのルートを作成する必要が

0

短い答えはノーです。

私は多分良い解決策を考えて、この

GET /users?<your query here> 

のようなあなたのルートの設定は、あなたが<your query>.idまたはクエリ> .username

をユーザーに問い合わせることができます
関連する問題