2017-03-01 12 views
0

Ich habe zwei Endpunkte:Koa2 gleiche Route Verschiedene Params

erhalten alle Benutzer von ID

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

erhalten alle Benutzer von Benutzername

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

Kann ich verschiedene Parameter senden auf derselben Route:

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

Danke für Ihre Hilfe!

Antwort

2

In Ihrem Beispiel stellen Sie URL-Parameter, nicht (named) Query-Parameter, so ist es nur ein Teil der URL, so ist dies sowieso "nur eine Zeichenfolge".

Das bedeutet, dass dann KOA Router von Datentypen bewusst sein würden (beispielsweise für integer:id und string für :name). Dies ist - soweit ich weiß - nicht der Fall.

Wenn Sie

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

oder

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

haben geben Sie nur diesen Teil der URL-Zeichenfolge ein Name - nichts mehr. (Ctx.params.id OR ctx.params.username)

Sie müssen also eine Logik implementieren, in dem Sie bestimmen, ob der Parameter eine ganze Zahl ist (und der Griff ist als ID) oder nicht (in diesem Fall Sie behandeln es als Benutzername).

Diese so aussehen könnte:

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

Hoffnung, den Sinn macht ... sonst, Sie haben wirklich zwei Strecken mit einer distingiashable Unterschrift keine

0

kurze Antwort ist, zu erstellen.

Ich denke, die gute Lösung vielleicht Ihre Route Setup, wie diese

GET /users?<your query here> 

dann Ihre Benutzer mit <your query>.id oder Abfrage > .username

Abfragen können
Verwandte Themen