Saya memiliki aplikasi web yang dibangun menggunakan Node.js dan Express. Sekarang saya ingin mendaftar semua rute yang terdaftar dengan metode yang sesuai.
Misalnya, jika saya telah mengeksekusi
app.get('/', function (...) { ... });
app.get('/foo/:id', function (...) { ... });
app.post('/foo/:id', function (...) { ... });
Saya ingin mengambil objek (atau sesuatu yang setara dengan itu) seperti:
{
get: [ '/', '/foo/:id' ],
post: [ '/foo/:id' ]
}
Apakah ini mungkin dan jika iya, bagaimana?
UPDATE: Sementara itu, saya telah membuat paket npm yang disebut get- route yang mengekstrak rute dari aplikasi yang diberikan, yang memecahkan masalah ini. Saat ini, hanya Express 4.x yang didukung, tetapi saya kira untuk saat ini tidak masalah. Hanya FYI.
Jawaban:
express 3.x
Oke, temukan sendiri ... hanya saja
app.routes
:-)express 4.x
Aplikasi - dibangun dengan
express()
Router - dibangun dengan
express.Router()
Catatan : Tumpukan mencakup fungsi middleware juga, harus disaring untuk mendapatkan "rute" saja.
sumber
app.routes.routes
- yang berarti saya bisa melakukan JSON.stringify (app.routes.routes)app._router.stack
app._router.stack
tidak terdefinisi.sumber
Rute ini didaftarkan langsung pada aplikasi (via app.VERB) dan rute yang terdaftar sebagai router middleware (via app.use). Express 4.11.0
sumber
Saya telah mengadaptasi posting lama yang tidak lagi online untuk kebutuhan saya. Saya telah menggunakan express.Router () dan mendaftarkan rute saya seperti ini:
Saya mengganti nama file document.js di apiTable.js dan mengadaptasinya seperti ini:
maka saya menyebutnya di server.js saya seperti ini:
Hasilnya terlihat seperti ini:
Ini hanya sebuah contoh tetapi mungkin berguna .. saya harap ..
sumber
Ini adalah hal kecil yang saya gunakan hanya untuk mendapatkan jalur terdaftar di express 4.x
sumber
${Object.keys(r.methods).join(', ')} ${r.path}
))DEBUG=express:* node index.js
Jika Anda menjalankan aplikasi Anda dengan perintah di atas, itu akan meluncurkan aplikasi Anda dengan
DEBUG
modul dan memberikan rute, ditambah semua fungsi middleware yang sedang digunakan.Anda dapat merujuk: ExpressJS - Debugging dan debug .
sumber
DEBUG=express:paths
hanya untuk melihat keluaran jalur dan tidak semua pesan debug lainnya. Terima kasih!Salin / tempel jawaban terima kasih dari Doug Wilson pada masalah github ekspres . Tapi kotor bekerja seperti pesona.
Menghasilkan
sumber
print
?https://www.npmjs.com/package/express-list-endpoints bekerja dengan sangat baik.
Contoh
Pemakaian:
Keluaran:
sumber
server = express(); app1 = express(); server.use('/app1', app1); ...
Fungsi untuk mencatat semua rute dalam express 4 (dapat dengan mudah di-tweak untuk v3 ~)
Output log:
Jadikan ini sebagai NPM https://www.npmjs.com/package/express-list-routes
sumber
output json
terlihat seperti ini:
output string
terlihat seperti ini:
ini didasarkan pada @ corvid's jawaban
semoga ini membantu
sumber
Saya terinspirasi oleh daftar-rute-rute Labithiotis, tetapi saya ingin ikhtisar semua rute dan url kasar saya sekaligus, dan tidak menentukan router, dan mencari tahu awalannya setiap kali. Sesuatu yang saya hasilkan adalah hanya mengganti fungsi app.use dengan fungsi saya sendiri yang menyimpan baseUrl dan diberikan router. Dari sana saya bisa mencetak tabel apa saja dari semua rute saya.
CATATAN ini berfungsi untuk saya karena saya mendeklarasikan rute saya di file rute tertentu (fungsi) yang dilewatkan di objek aplikasi, seperti ini:
Ini memungkinkan saya untuk memasukkan objek 'aplikasi' lain dengan fungsi penggunaan palsu, dan saya bisa mendapatkan SEMUA rute. Ini berfungsi untuk saya (menghapus beberapa kesalahan memeriksa kejelasan, tetapi masih berfungsi sebagai contoh):
Contoh lengkap ini (dengan beberapa router CRUD dasar) baru saja diuji dan dicetak:
Menggunakan cli-table saya mendapatkan sesuatu seperti ini:
Yang menendang pantat.
sumber
Express 4
Diberikan konfigurasi Express 4 dengan titik akhir dan router bersarang
Memperluas jawaban @caleb dimungkinkan untuk mendapatkan semua rute secara rekursif dan diurutkan.
Untuk output string dasar.
Pembaruan 1:
Karena keterbatasan internal Express 4, tidak mungkin untuk mengambil aplikasi yang dipasang dan router yang dipasang. Misalnya tidak mungkin untuk mendapatkan rute dari konfigurasi ini.
sumber
Perlu beberapa penyesuaian tetapi harus bekerja untuk Express v4. Termasuk rute-rute yang ditambahkan dengan
.use()
.sunting: peningkatan kode
sumber
Pendekatan yang sedikit diperbarui dan lebih fungsional untuk jawaban @ prranay:
sumber
Ini berhasil untuk saya
O / P:
sumber
Inisialisasi router kilat
Mengontrol pengontrol pengguna
Rute pengguna
Ekspor rute API
Keluaran
sumber
Pada Express 3.5.x, saya menambahkan ini sebelum memulai aplikasi untuk mencetak rute di terminal saya:
Mungkin itu bisa membantu ...
sumber
Anda dapat menerapkan
/get-all-routes
API:Berikut ini adalah demo: https://glitch.com/edit/#!/get-all-routes-in-nodejs
sumber
Jadi saya melihat semua jawaban .. paling tidak suka .. mengambil beberapa dari beberapa .. membuat ini:
bukan yang tercantik .. tapi bersarang, dan melakukan trik
perhatikan juga 20 di sana ... Saya hanya berasumsi tidak akan ada rute normal dengan 20 metode .. jadi saya menyimpulkan itu semua ..
sumber
perincian rute mencantumkan rute untuk "express": "4.xx",
OUTPUT KODE SEDERHANA
sumber
Cukup gunakan paket npm ini, itu akan memberikan output web serta output terminal dalam tampilan tabel diformat bagus.
https://www.npmjs.com/package/express-routes-catalogue
sumber
express-routes-catalogue
juga menampilkan rute sebagai HTML, sedangkan yang lainnya tidak.Berikut ini adalah fungsi satu-baris untuk mencetak rute dengan cantik di Ekspres
app
:sumber
Saya menerbitkan paket yang mencetak semua middleware serta rute, sangat berguna ketika mencoba mengaudit aplikasi ekspres. Anda memasang paket sebagai middleware, sehingga bahkan mencetaknya sendiri:
https://github.com/ErisDS/middleware-stack-printer
Mencetak semacam pohon seperti:
sumber