2016-06-27 4 views
0

Я пытаюсь настроить маршруты expressJS.Как исключить шаблон из expressJS route

app.route(base + '/inventory/adjustments').get(policy.isAllowed, inventoryChangeCtrl.search); 


    app.route(base + '/inventory/:inventoryId(?!^adjustments$)').get(policy.isAllowed, inventoryCtrl.findById) 

Рассмотрим входные данные ../inventory/adjustments

Проблема заключается в том, что в первом маршруте, она соответствует должным образом, но контроллер вызывает next() который, как предполагается, чтобы провалиться к default route handler, что я в другом месте установки. Но вместо этого следующий обработчик маршрута также сопоставляется.

Итак, теперь я пытаюсь исключить более конкретные строки из этого обработчика маршрута с помощью регулярного выражения, но теперь он не соответствует правильному вводу, например .../inventory/9039309309.

Может ли кто-нибудь предложить, как исключить первый маршрут со второго маршрута? (и по-прежнему разрешать следующий вызов для обработчика по умолчанию).

Спасибо.

+0

ты говоришь, что добраться до/инвентаризации/корректировок также согласован с/инвентаре /: inventory_id –

+0

Использовать редирект вместо того, чтобы звонить дальше. – Molda

+0

yes @Dave Briand Второй маршрут также соответствует первому запросу, потому что я вызываю next(). Если первый контроллер возвращает ответ, его не вызывают, конечно, но есть промежуточное ПО по умолчанию, которое все мои ответы должны пройти. –

ответ

0

Если inventoryId всегда числовая, вы можете сделать матч более конкретно:

app.route(base + '/inventory/:inventoryId(\\d+)', ...); 

Таким образом, он не будет соответствовать "adjustments" и маршрут не сработает.

То же самое применимо и к другим конкретным шаблонам, которые могут совпадать, если этот шаблон также не соответствует "adjustments".

EDIT: если inventoryId является MongoDB ObjectId, матч стал бы:

app.route(base + '/inventory/:inventoryId([a-fA-F\\d]{24})', ...); 
+0

inventoryId - это шестнадцатеричная строка - это точный идентификатор mongodb (который я считаю шестнадцатеричным). Но я попробую этот подход с положительным совпадением и посмотрю, работает ли он лучше, чем пытаться исключить строку. –

+0

@RichardG Я отредактировал свой ответ, чтобы показать, как вы можете сопоставить – robertklep

+0

объекта ObjectId'. –

Смежные вопросы