Dopasowywanie tras
Wzorce path-to-regexp, tej samej składni używa Next.js - parametry nazwane, wildcardy i to, jak dopasowane wartości trafiają do funkcji.
Wzorce tras obsługuje biblioteka path-to-regexp -
ta sama składnia, której Next.js używa w polu matcher obiektu config. Parametry ze ścieżki
wyłuskują się przy okazji dopasowania i trafiają do event.params.
Przykłady
Najszybciej zrozumieć to na przykładach. W każdym z nich zakładka „Wzorzec” pokazuje zapis, a „Wynik” - które ścieżki go przechodzą.
Ścieżka dosłowna
Pasuje wyłącznie do /dashboard, bez żadnych parametrów.
/dashboard /
/home
/dashboard [PASS]
/settingsWarianty w nawiasach
Alternatywa (v1|v2) łapie oba prefiksy naraz, więc jeden wpis obsłuży dwie wersje API.
/(v1|v2)/:path* /
/home
/v1/anything [PASS]
/v2/anything [PASS]
/settingsParametry
Parametr zapisuje się jako :nazwa. Pod tą właśnie nazwą wartość segmentu trafia później do
event.params.
Jeden segment
Łapie /dashboard/cokolwiek i oddaje parametr team o wartości cokolwiek.
/dashboard/:team /
/home
/dashboard
/dashboard/team1 [PASS]
/dashboard/team2 [PASS]
/settingsSegment parametryczny nie musi kończyć ścieżki. Postawiony w środku wymaga, żeby zgadzało się również to, co idzie po nim:
/dashboard/:team/delete /
/home
/dashboard
/dashboard/team1
/dashboard/team2/delete [PASS]
/settingsSegment opcjonalny
Znak zapytania zwalnia segment z obowiązku istnienia: wzorzec przechodzi zarówno dla samego
/team, jak i dla /team/cokolwiek. W pierwszym przypadku slug zostaje pusty.
/team/:slug? /
/home
/dashboard
/team [PASS]
/team/team1 [PASS]
/team/team2/settings
/settingsOgon opcjonalny
Gwiazdka zbiera całą resztę ścieżki do tablicy: /team/team2/settings daje slug o wartości
["team2", "settings"]. Zero powtórzeń też jest dopuszczalne, więc sam /team przechodzi.
/team/:slug* /
/home
/dashboard
/team/team1 [PASS]
/team/team2/settings [PASS]
/settingsOgon wymagany
Plus zachowuje się jak gwiazdka, z jedną różnicą: wymaga przynajmniej jednego segmentu, więc samo
/team już odpada.
/team/:slug+ /
/home
/dashboard
/team/team1 [PASS]
/team/team2/settings [PASS]
/settingsCzy ta strona była pomocna?
M↓obsługiwane.