Узел expressJwt, если не указан идентификатор маршрута
Мы используем библиотеку expressJwt, и я хочу иметь возможность исключить GET
по следующему маршруту api/items/:id
но не включать какие-либо маршруты, которые выглядят как api/items/:id/special-action
,
До сих пор я был в состоянии исключить только все маршруты, которые имеют :id
,
Ниже показано, как мы достигли, за исключением GET
маршруты, которые имеют :id
,
this.app.use(expressJwt({ secret: secrets.JWT }).unless({
path: [
...
{ url: /\/api\/items\/(.)/, methods: ['GET'] },
...
]
});
я пробовал { url: /\/api\/items\/(.)\//, methods: ['GET'] }
но тогда не совпадает ни с какими маршрутами и поэтому нет маршрутов с :id
быть исключенным.
Что-то не так в том, как я использую регулярное выражение, но мне трудно это увидеть. Нужно ли менять (.)
не совпадать всем? Я предполагаю, что это может соответствовать косой черты
1 ответ
Вы можете использовать
/^\/api\/items\/([^\/]*)$/
[^\/]*
класс отрицанных символов соответствует 0 или более символам, отличным от /
и ^
/ $
якоря гарантируют, что шаблон будет использован против всей строки.
Смотрите демо-версию регулярного выражения.
подробности
^
- начало привязки строки\/api\/items\/
- соответствует буквальному/api/items/
подстрока([^\/]*)
- Захват группы 1: любые 0+ символов, кроме/
,$
конец строки привязки. Обратите внимание, что если вы хотите убедиться, что[^\/]*
не имеет/
после, добавить$
конец строки привязки в конце.