Я хотел бы получить URL формы (строго) /forumId/slug/
с Express 'router.get()
.Дополнительные токены должны привести к 404.
Я придумал этот маршрут: /:forumId([^?\/]{0,}):parameters1?/:slug([^?\/]{0,})?:parameters2?
, который в соответствии с express-route-tester
ведет себя как ожидалось.
Однако Express, похоже, также перехватывает пути сдополнительные жетоны после пули.Непосредственная передача регулярного выражения Javascript вместо строки имеет тот же эффект.
Вот регулярное выражение, которое я использовал: /^\/(\d+)(?:\?[^\?\/]{0,})?(?:$|\/([^\?\/]{0,})(?:\?[^\?\/]{0,})?\/?$)/
Примеры строк, которые должны соответствовать (эти работы):
/7721
/7721/
/7721?page=2
/7721/ForumTitle/
/7721/AnotherForumTitle?test/
/7721/YetAnotherForumTitle?page=2
/7721?page=3/ForumTitle?page=2
/7721?page=3/ForumTitle?page=2/
Пример строк, которые не должны совпадать:
/7721?page=3/ForumTitle?page=2/threadId
Express использует path-to-regexp
для разбора строки и в соответствии с документами (https://www.npmjs.com/package/path-to-regexp#user-content-usage), 'end'по умолчанию для этого параметра установлено значение true, что подтверждает, что совпадение должно прекратиться сразу после слага.
Чего мне не хватает?
Версия Express - 4.16.4.
ОБНОВЛЕНИЕ: удаление части о параметрах запроса (? Page = 2) в регулярном выражении решило проблему. Почему это так? Был ли мой регулярный запрос некорректен (я пытался определить возможные жадные совпадения, но не смог найти) илиэто ожидается от path-to-regexp
?