2017-03-01 4 views
0

다른 :Koa2 같은 길을 내가 두 엔드 포인트가에 Params

이 ID로 모든 사용자를 GET을

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의 일부일 뿐이므로이 매개 변수는 "단순한 문자열"입니다. 코아 라우터는 다음 데이터 유형 (예를 들어 대 :name:id위한 integerstring)을 알고있을 것이라고

이 수단. 이것은 - 내가 아는 한 - 그 사건이 아닙니다. 아무것도 더 -

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

또는

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

이있을 때 당신은 단지 URL 문자열 이름의이 부분을 제공합니다.

그래서 당신이 매개 변수가 정수인지 확인하는 (그리고 손잡이는 ID 같다) 또는하지 (여기서, 로직을 구현해야 (또는 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 
    } 
}); 

희망은 ... 그렇지 않으면, 당신은 정말

0

짧은 대답이 더있는 distingiashable 서명으로 두 개의 경로를 만들어야합니다.

나는 어쩌면 좋은 해결책을 생각, 다음이 <your query>.id 또는 쿼리 > .username

와 사용자를 조회 할 수 있습니다이

GET /users?<your query here> 

같은 경로 설정