2017-03-01 36 views
0

我有兩個端點:Koa2同一路線不同PARAMS

通過ID得到所有用戶

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的一部分,所以無論如何這只是「一個字符串」。

這意味着,koa路由器然後將知道數據類型(例如integer對於:idstring對於:name)。這是 - 據我所知 - 並非如此。

當你有

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

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

你只要給URL字符串名稱的這一部分 - 僅此而已。 (ctx.params.id OR ctx.params.username)

所以需要實現一個邏輯,在這裏確定該參數是一個整數(和手柄是作爲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簽名

0

簡短的答案是沒有創建兩條路線。

我認爲很好的解決方案,也許,你的路線設置這樣

GET /users?<your query here> 

那麼你可以用<your query>.id或查詢> .username

查詢用戶