экспресс дифференцировать динамический сегмент и другой статический сегмент - PullRequest
0 голосов
/ 28 апреля 2019
const route = Router();
router.get('user/:UserId');
router.post('user/:UserId');
router.put('user/:UserId');

У меня есть вышеупомянутые маршруты для пользователя REST API, я хотел, чтобы пользователь по местоположению API. поэтому я попробовал что-то вроде ниже.

router.get('user/getUserByLocation');

Проблема в том, что он вызывает router.get('user/:UserId');, поскольку находит getUserByLocation как UserId.

Я изменил router.get('user/getUserByLocation'); на router.get('getUserByLocation');, это работает.

Мой вопрос заключается в том, является ли приведенное выше решение лучшим подходом, или мне нужно использовать router.get('user'); со строкой запроса, чтобы получить getUserByLocation.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Вы можете объявить в маршрутизаторе, что :UserId должно быть числом (а не строкой), используя (\\d+). Таким образом, user/getUserByLocation не должен соответствовать вашему маршруту user/:UserId:

const route = Router();

router.get('user/:UserId(\\d+)');
router.post('user/:UserId(\\d+)');
router.put('user/:UserId(\\d+)');

router.get('user/getUserByLocation');
0 голосов
/ 28 апреля 2019

Вы должны настроить getUserByLocation до router.get('user/:UserId'). Измените порядок вашего кода. Сначала настройте router.get('user/getUserByLocation').

В экспрессе выполняется первый соответствующий обработчик запросов, поэтому, если router.get('user/getUserByLocation') настроено после router.get('user/:UserId'). Это будет вызвано до этого.

const route = Router();

router.get('user/getUserByLocation');

router.get('user/:UserId');
router.post('user/:UserId');
router.put('user/:UserId');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...