Czy istnieje sposób, aby to zrobić w pojedynczym wywołaniu funkcji?
var todo = function (req, res){};
app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);
Coś jak:
app.get("/", "/blabla", "/blablablabla", todo );
Wiem, że to bałagan składniowy, ale tylko po to, aby dać wyobrażenie o tym, co chciałbym osiągnąć, tablica tras byłaby niesamowita!
Czy ktoś wie, jak to zrobić?
Odpowiedzi:
Natknąłem się na to pytanie, szukając tej samej funkcjonalności.
@Jonathan Ong wspomniał w powyższym komentarzu, że używanie tablic jako ścieżek jest przestarzałe, ale zostało wyraźnie opisane w Express 4 i działa w Express 3.x. Oto przykład czegoś do wypróbowania:
Od wewnątrz
request
obiektu, ścieżką/hooplul/poo?bandle=froo&bandle=pee&bof=blarg
:Zwróć uwagę, co dzieje się z parametrami: zdaje sobie sprawę z grup przechwytywania i parametrów we wszystkich możliwych ścieżkach, niezależnie od tego, czy są one używane w bieżącym żądaniu.
Tak więc układanie wielu ścieżek w macierz można łatwo wykonać, ale efekty uboczne są prawdopodobnie nieprzewidywalne, jeśli masz nadzieję, że uda ci się znaleźć coś pożytecznego ze ścieżki, która została użyta przez parametry lub grupy przechwytywania. Prawdopodobnie jest to bardziej przydatne do redundancji / aliasingu, w takim przypadku będzie działać bardzo dobrze.
Edycja: zobacz również odpowiedź @ c24w poniżej .
Edycja 2: To jest średnio popularna odpowiedź. Pamiętaj, że ExpressJS, podobnie jak większość bibliotek Node.js, to ruchoma uczta. Chociaż powyższy routing nadal działa (używam go w tej chwili, bardzo przydatna funkcja), nie mogę ręczyć za wyjście obiektu żądania (z pewnością różni się od tego, co opisałem). Przetestuj dokładnie, aby upewnić się, że uzyskasz pożądane wyniki.
źródło
:var
ustawia toreq.param
, czego nie używasz. jest używany tylko w tym przypadku do ustawiania wyrażenia regularnego.(bla|blabla)
ustawia wyrażenie regularne do dopasowania, więc dopasowuje ciągibla
iblablah
.?
sprawia, że całe wyrażenie regularne jest opcjonalne, więc również pasuje/
.źródło
/bla(bla)?
działa również, ale parametry po nie są prawidłowo wypełniane (tj./bla(bla)?/:value
nie są wypełnianereq.params.value
). Czy ktoś wie, dlaczego?req.params.var
ale musisz się upewnić, żereq
przeszedłeś do funkcjiW rzeczywistości możesz przekazywać szereg ścieżek , tak jak wspomniałeś, i działa świetnie:
źródło
Aby rozwinąć odpowiedź Kevina , to pochodzi z dokumentów 4.x :
Mają kilka przykładów , w tym:
źródło
Poszedłem na:
źródło
wymagaj pliku oryginalnej trasy i zdefiniuj nową trasę w ten sposób
źródło