2016-04-02 2 views
0

Кто-нибудь знает, если и можно, и если его хорошая практика, чтобы определить несколько маршрутов GET, такие как:Несколько Узнавайте маршруты с различными параметрами

  • ГЭТ: возвращает «/ Channels» все каналы в приложении
  • GET : '/ каналы /: имя пользователя' возвращает все каналы, созданные пользователем
  • GET: '/ каналы /: ChannelName' возвращаемые данные о канале
  • POST: '/ каналы' создает новый канал
  • PUT: '/ channels /: channelname' редактирует канал с именем ': channelname'

Что-то неясно - это третий маршрут GET. Не знаю, возможно ли это, или если это лучший способ сделать это.

ответ

1

Вы не можете иметь несколько маршрутов с тем же параметром. Я думаю, что наиболее логичным является, чтобы сделать это:

  • GET: «/ каналы/пользователь /: имя пользователя» возвращает все каналы, созданные пользователем
+0

но параметр отличается .. один «: ChannelName», а другой «: имя пользователя» –

+0

В вашем примере да, но представьте, если у вас есть пользователь под названием «Джон» и канал «Джон». Вы вызовете маршрут:/channels/John, и вы не сможете это обработать. – Max

+0

Хм, вы правы. Если вы не проверите всех пользователей, прежде чем создавать новый канал, который будет любопытным дорогостоящим lol .. хорошо, тогда создаст еще один маршрут, как сказал. Спасибо :) –

0

Вы не могли бы использовать тот же глагол (get, post, put ..) за тот же маршрут. Вы можете использовать те же самые verb для разных route или же route для разных verb.

в вашей задаче используется

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

оба действуют как одно и то же, потому что, когда вы запрашиваете на /channels/somename сюда сайта клиента, то действительны для обоих маршрутов, потому что username может быть somename или channelname может быть somename.

Чтобы разграничить два маршрута, необходимо изменить свой маршрут. как

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

для node.js и express вы можете использовать как:

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); 
Смежные вопросы