2016-04-02 4 views
0

weiß jemand, ob u kann und wenn seine gute Praxis mehr GET-Routen zu definieren, wie zum Beispiel:Mehrere GET Routen mit unterschiedlichen Parametern

  • GET: ‚/ Kanäle‘ gibt alle Kanäle in der App
  • GET : '/ Kanäle /: username' gibt alle von einem Benutzer erstellt Kanäle
  • GET: '/ Kanäle /: channel' return Details über einen Kanal
  • POST: '/ Kanäle' erstellt einen neuen Kanal
  • PUT: '/ channels /: channelname' bearbeitet einen Kanal mit dem Namen ': channelname'

Was ist verwirrt ist die dritte GET-Route. Ich weiß nicht, ob es möglich ist oder ob es einen besseren Weg gibt.

Antwort

1

Sie können nicht mehrere Routen mit demselben Parameter haben. Ich denke, dass der logischste Weg, dies zu tun ist:

  • GET: ‚/ Kanäle/user /: username‘ gibt alle von einem Benutzer erstellt Kanäle
+0

aber der Parameter ist anders .. ist ‚: Channel‘ und der andere ‚: username‘ wie

GET: '/channels/user/:username' // that different from /channels/:channelname 

für node.js und express Sie wie verwenden können –

+0

In Ihrem Beispiel ja, aber Stellen Sie sich vor, Sie hätten einen Benutzer namens "John" und einen Kanal namens "John". Du wirst die Route anrufen:/channels/John und du kannst damit nicht umgehen. – Max

+0

hmm, du hast recht .. es sei denn, du prüfst alle Benutzer, bevor du einen neuen Kanal erstellst, was ziemlich teuer wäre, lol .. gut, dann wirst du eine andere Route erstellen, wie du sagtest. Danke :) –

0

Sie nicht gleiches Verb verwenden könnten (get, post, put ..) für die gleiche Strecke. Sie können die gleichen verb für verschiedene route oder gleiche route für verschiedene verb verwenden.

in Ihr Problem verwendet

GET: '/channels/:username' and 
GET: '/channels/:channelname' 

wirken beide als gleiche Sache, denn wenn man von /channels/somename fro Client-Seite dann gilt für beide Routen verlangen, weil usernamesomename sein kann oder channelname kann somename sein.

so zu unterscheiden, zwei Routen müssen Ihre Route ändern.

var router = express.Router(); 

router.route('/place') 
     .get(placeController.getPlaces) 
     .post(placeController.createPlace); 

router.route('/place/:placeId') // same route for different verb 
     .get(placeController.getPlaceById) 
     .put(placeController.updatePlaceById) 
     .delete(placeController.deletePlaceById); 

router.route('/hotel/:placeId') // here :placeId params name same for both but /hotel differentiate from /place 
      .get(hotelController.getHotelById) 
      .put(hotelController.updateHotelById) 
      .delete(hotelController.deletHotelById); 
Verwandte Themen