Mam aplikację internetową zbudowaną przy użyciu Node.js i Express. Teraz chciałbym wymienić wszystkie zarejestrowane trasy wraz z odpowiednimi metodami.
Np. Jeśli wykonałem
app.get('/', function (...) { ... });
app.get('/foo/:id', function (...) { ... });
app.post('/foo/:id', function (...) { ... });
Chciałbym pobrać obiekt (lub coś równoważnego temu), taki jak:
{
get: [ '/', '/foo/:id' ],
post: [ '/foo/:id' ]
}
Czy to możliwe, a jeśli tak, to w jaki sposób?
AKTUALIZACJA: W międzyczasie utworzyłem pakiet npm o nazwie get-route, który wyodrębnia trasy z danej aplikacji, co rozwiązuje ten problem. Obecnie obsługiwany jest tylko Express 4.x, ale chyba teraz jest w porządku. Po prostu dla ciebie.
Odpowiedzi:
ekspresowe 3.x
Okej, sam to znalazłem ... to po prostu
app.routes
:-)ekspresowe 4.x
Aplikacje - zbudowane z
express()
Routery - zbudowane z
express.Router()
Uwaga : stos zawiera również funkcje oprogramowania pośredniego, powinien zostać przefiltrowany, aby uzyskać tylko „trasy” .
źródło
app.routes.routes
- co oznacza, że mogłem zrobić JSON.stringify (app.routes.routes)app._router.stack
app._router.stack
jest niezdefiniowany.źródło
W ten sposób trasy są rejestrowane bezpośrednio w aplikacji (przez app.VERB) i trasy zarejestrowane jako oprogramowanie pośredniczące routera (przez app.use). Express 4.11.0
źródło
Dostosowałem stary post, który nie jest już dostępny online do moich potrzeb. Użyłem express.Router () i zarejestrowałem moje trasy w następujący sposób:
Zmieniłem nazwę pliku document.js w apiTable.js i dostosowałem go w następujący sposób:
następnie nazywam to w moim server.js w następujący sposób:
Wynik wygląda następująco:
To tylko przykład, ale może się przydać .. mam nadzieję ..
źródło
Oto drobiazg, którego używam tylko po to, aby uzyskać zarejestrowane ścieżki w ekspresie 4.x.
źródło
${Object.keys(r.methods).join(', ')} ${r.path}
))DEBUG=express:* node index.js
Jeśli uruchomisz aplikację za pomocą powyższego polecenia, uruchomi ona aplikację z
DEBUG
modułem i poda trasy, a także wszystkie używane funkcje oprogramowania pośredniego.Możesz polecić : ExpressJS - debugowanie i debugowanie .
źródło
DEBUG=express:paths
aby zobaczyć, aby wyświetlić tylko ścieżkę wyjściową, a nie wszystkie inne komunikaty debugowania. Dzięki!Hacky kopiuj / wklej odpowiedź dzięki uprzejmości Douga Wilsona na temat ekspresowych problemów z githubem . Brudny, ale działa jak urok.
Produkuje
źródło
print
?https://www.npmjs.com/package/express-list-endpoints działa całkiem dobrze.
Przykład
Stosowanie:
Wynik:
źródło
server = express(); app1 = express(); server.use('/app1', app1); ...
Funkcja rejestrowania wszystkich tras w ekspresie 4 (może być łatwo dostosowana do v3 ~)
Dane wyjściowe dzienników:
Zrobiono to w NPM https://www.npmjs.com/package/express-list-routes
źródło
wyjście json
wygląda tak:
ciąg wyjściowy
wygląda tak:
są one oparte na @ corvid za odpowiedź
mam nadzieję że to pomoże
źródło
Zainspirowały mnie trasy ekspresowe z listami Labithiotis, ale chciałem przeglądać wszystkie moje trasy i brutalne adresy URL za jednym razem, a nie podawać routera i za każdym razem wymyślać prefiks. Coś, co wymyśliłem, to po prostu zastąpić funkcję app.use moją własną funkcją, która przechowuje baseUrl i dany router. Stamtąd mogę wydrukować dowolną tabelę wszystkich moich tras.
UWAGA, to działa dla mnie, ponieważ deklaruję moje trasy w określonym pliku tras (funkcji), który jest przekazywany w obiekcie aplikacji, jak poniżej:
To pozwala mi przekazać inny obiekt „aplikacji” z fałszywą funkcją użytkowania i mogę uzyskać WSZYSTKIE trasy. To działa dla mnie (usunąłem pewne sprawdzanie błędów pod kątem przejrzystości, ale nadal działa w przykładzie):
Ten pełny przykład (z kilkoma podstawowymi routerami CRUD) został właśnie przetestowany i wydrukowany:
Za pomocą cli-table otrzymałem coś takiego:
Który kopie tyłek.
źródło
Ekspres 4
Biorąc pod uwagę konfigurację Express 4 z punktami końcowymi i zagnieżdżonymi routerami
Po rozszerzeniu odpowiedzi @caleb można uzyskać rekursywnie i posortować wszystkie trasy.
Dla podstawowego ciągu wyjściowego.
Aktualizacja 1:
Ze względu na wewnętrzne ograniczenia Express 4 nie można pobrać zainstalowanej aplikacji i zamontowanych routerów. Na przykład nie można uzyskać tras z tej konfiguracji.
źródło
Potrzebujesz korekt, ale powinien działać w Expressie v4. W tym trasy dodane za pomocą
.use()
.edycja: ulepszenia kodu
źródło
Nieco zaktualizowane i bardziej funkcjonalne podejście do odpowiedzi @ prranay:
źródło
To zadziałało dla mnie
O / P:
źródło
Zainicjuj router ekspresowy
Zaimportuj kontroler użytkownika
Trasy użytkownika
Eksportuj trasy API
Wynik
źródło
W Express 3.5.x dodaję to przed uruchomieniem aplikacji, aby wydrukować trasy na moim terminalu:
Może to może pomóc ...
źródło
Możesz wdrożyć
/get-all-routes
interfejs API:Oto demo: https://glitch.com/edit/#!/get-all-routes-in-nodejs
źródło
Więc patrzyłem na wszystkie odpowiedzi .. nie lubiłem większości .. wziąłem kilka z kilku ... zrobiłem to:
nie najładniejszy .. ale zagnieżdżony, i załatwia sprawę
Zwróć też uwagę na 20 tam ... Po prostu zakładam, że nie będzie normalnej trasy z 20 metodami ... więc dedukuję, że to wszystko
źródło
szczegóły trasy zawierają listę tras dla „express”: „4.xx”,
PROSTA WYDAJNOŚĆ KODU
źródło
Wystarczy użyć tego pakietu npm, da on zarówno wyjście sieciowe, jak i końcowe w ładnym, sformatowanym widoku tabeli.
https://www.npmjs.com/package/express-routes-catalogue
źródło
express-routes-catalogue
wyświetla również trasy jako HTML, chociaż druga nie.Oto funkcja jednowierszowa do wydrukowania tras w Express
app
:źródło
Opublikowałem pakiet, który drukuje całe oprogramowanie pośrednie, a także trasy, bardzo przydatne podczas próby skontrolowania aplikacji ekspresowej. Montujesz pakiet jako oprogramowanie pośrednie, więc nawet się drukuje:
https://github.com/ErisDS/middleware-stack-printer
Drukuje rodzaj drzewa, takiego jak:
źródło