Bagaimana cara mendapatkan semua rute terdaftar di Express?

181

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.

Golo Roden
sumber
Semua solusi yang saya coba, tidak berfungsi ketika Anda mendefinisikan Router. Ini hanya berfungsi per rute - yang tidak memberi saya seluruh url untuk rute itu di aplikasi saya ...
guy mograbi
1
@guymograbi Anda mungkin ingin melihat stackoverflow.com/a/55589657/6693775
nbsamar

Jawaban:

230

express 3.x

Oke, temukan sendiri ... hanya saja app.routes:-)

express 4.x

Aplikasi - dibangun denganexpress()

app._router.stack

Router - dibangun denganexpress.Router()

router.stack

Catatan : Tumpukan mencakup fungsi middleware juga, harus disaring untuk mendapatkan "rute" saja.

Golo Roden
sumber
Saya menggunakan simpul 0.10 dan itu app.routes.routes- yang berarti saya bisa melakukan JSON.stringify (app.routes.routes)
guy mograbi
7
Hanya berfungsi untuk Express 3.x, bukan 4.x. Dalam 4.x, Anda harus memeriksaapp._router.stack
avetisk
14
Ini tidak bekerja seperti yang diharapkan untuk saya. app._router tampaknya tidak menyertakan rute dari app.use ('/ path', otherRouter);
Michael Cole
Apakah ada cara agar ini dapat diintegrasikan dengan skrip baris perintah yang akan menarik dengan persis file rute yang sama dengan aplikasi live tanpa benar-benar memulai aplikasi web?
Lawrence I. Siden
5
Setidaknya dalam mengungkapkan 4.13.1 app._router.stacktidak terdefinisi.
levigroker
54
app._router.stack.forEach(function(r){
  if (r.route && r.route.path){
    console.log(r.route.path)
  }
})
eychu
sumber
1
Perhatikan bahwa jika Anda menggunakan sesuatu seperti Express Router (atau middleware lainnya), Anda akan melihat @Caleb sedikit lebih panjang yang memperluas pendekatan ini.
Iain Collins
31

Rute ini didaftarkan langsung pada aplikasi (via app.VERB) dan rute yang terdaftar sebagai router middleware (via app.use). Express 4.11.0

//////////////
app.get("/foo", function(req,res){
    res.send('foo');
});

//////////////
var router = express.Router();

router.get("/bar", function(req,res,next){
    res.send('bar');
});

app.use("/",router);


//////////////
var route, routes = [];

app._router.stack.forEach(function(middleware){
    if(middleware.route){ // routes registered directly on the app
        routes.push(middleware.route);
    } else if(middleware.name === 'router'){ // router middleware 
        middleware.handle.stack.forEach(function(handler){
            route = handler.route;
            route && routes.push(route);
        });
    }
});

// routes:
// {path: "/foo", methods: {get: true}}
// {path: "/bar", methods: {get: true}}
Caleb
sumber
1
Luar biasa, terima kasih atas contoh yang menunjukkan cara mengatur rute tampilan melalui middleware seperti router Express.
Iain Collins
31

Saya telah mengadaptasi posting lama yang tidak lagi online untuk kebutuhan saya. Saya telah menggunakan express.Router () dan mendaftarkan rute saya seperti ini:

var questionsRoute = require('./BE/routes/questions');
app.use('/api/questions', questionsRoute);

Saya mengganti nama file document.js di apiTable.js dan mengadaptasinya seperti ini:

module.exports =  function (baseUrl, routes) {
    var Table = require('cli-table');
    var table = new Table({ head: ["", "Path"] });
    console.log('\nAPI for ' + baseUrl);
    console.log('\n********************************************');

    for (var key in routes) {
        if (routes.hasOwnProperty(key)) {
            var val = routes[key];
            if(val.route) {
                val = val.route;
                var _o = {};
                _o[val.stack[0].method]  = [baseUrl + val.path];    
                table.push(_o);
            }       
        }
    }

    console.log(table.toString());
    return table;
};

maka saya menyebutnya di server.js saya seperti ini:

var server = app.listen(process.env.PORT || 5000, function () {
    require('./BE/utils/apiTable')('/api/questions', questionsRoute.stack);
});

Hasilnya terlihat seperti ini:

Contoh hasil

Ini hanya sebuah contoh tetapi mungkin berguna .. saya harap ..

marco.marinangeli
sumber
2
Ini tidak berfungsi untuk rute bersarang seperti yang diidentifikasi di sini: stackoverflow.com/questions/25260818/…
2
Waspadalah terhadap tautan dalam jawaban ini! Ini mengarahkan saya ke situs web acak dan memaksa unduhan ke komputer saya.
Tyler Bell
29

Ini adalah hal kecil yang saya gunakan hanya untuk mendapatkan jalur terdaftar di express 4.x

app._router.stack          // registered routes
  .filter(r => r.route)    // take out all the middleware
  .map(r => r.route.path)  // get all the paths
jelas
sumber
console.log (server._router.stack.map (r => r.route) .filter (r => r) .map (r => ${Object.keys(r.methods).join(', ')} ${r.path}))
standup75
di mana Anda meletakkan ini, di app.js ??
Juan
21

DEBUG=express:* node index.js

Jika Anda menjalankan aplikasi Anda dengan perintah di atas, itu akan meluncurkan aplikasi Anda dengan DEBUGmodul dan memberikan rute, ditambah semua fungsi middleware yang sedang digunakan.

Anda dapat merujuk: ExpressJS - Debugging dan debug .

nbsamar
sumber
3
Sejauh ini jawaban terbaik ... satu env var!
Astaga
Memang jawaban yang paling berguna. @nbsamar Anda bahkan mungkin perluas untuk mengatakan DEBUG=express:pathshanya untuk melihat keluaran jalur dan tidak semua pesan debug lainnya. Terima kasih!
Mark Edington
19

Salin / tempel jawaban terima kasih dari Doug Wilson pada masalah github ekspres . Tapi kotor bekerja seperti pesona.

function print (path, layer) {
  if (layer.route) {
    layer.route.stack.forEach(print.bind(null, path.concat(split(layer.route.path))))
  } else if (layer.name === 'router' && layer.handle.stack) {
    layer.handle.stack.forEach(print.bind(null, path.concat(split(layer.regexp))))
  } else if (layer.method) {
    console.log('%s /%s',
      layer.method.toUpperCase(),
      path.concat(split(layer.regexp)).filter(Boolean).join('/'))
  }
}

function split (thing) {
  if (typeof thing === 'string') {
    return thing.split('/')
  } else if (thing.fast_slash) {
    return ''
  } else {
    var match = thing.toString()
      .replace('\\/?', '')
      .replace('(?=\\/|$)', '$')
      .match(/^\/\^((?:\\[.*+?^${}()|[\]\\\/]|[^.*+?^${}()|[\]\\\/])*)\$\//)
    return match
      ? match[1].replace(/\\(.)/g, '$1').split('/')
      : '<complex:' + thing.toString() + '>'
  }
}

app._router.stack.forEach(print.bind(null, []))

Menghasilkan

screengrab

AlienWebguy
sumber
Mengapa rute tidak berbeda?
Vladimir Vukanac
1
Ini adalah satu-satunya yang bekerja untuk saya dengan Express 4.15. Tidak ada yang memberi jalan penuh. Satu-satunya peringatan adalah bahwa ia tidak mengembalikan jalur root default / - tidak ada yang melakukannya.
Shane
Saya tidak mengerti mengapa Anda mengikat argumen print?
ZzZombo
@ZZZombo bertanya pada Doug Wilson, dia yang menulisnya. Anda mungkin dapat membersihkan semua ini jika mau.
AlienWebguy
11

https://www.npmjs.com/package/express-list-endpoints bekerja dengan sangat baik.

Contoh

Pemakaian:

const all_routes = require('express-list-endpoints');
console.log(all_routes(app));

Keluaran:

[ { path: '*', methods: [ 'OPTIONS' ] },
  { path: '/', methods: [ 'GET' ] },
  { path: '/sessions', methods: [ 'POST' ] },
  { path: '/sessions', methods: [ 'DELETE' ] },
  { path: '/users', methods: [ 'GET' ] },
  { path: '/users', methods: [ 'POST' ] } ]
aercolino
sumber
2
Ini tidak bekerja dengan: server = express(); app1 = express(); server.use('/app1', app1); ...
Danosaure
8

Fungsi untuk mencatat semua rute dalam express 4 (dapat dengan mudah di-tweak untuk v3 ~)

function space(x) {
    var res = '';
    while(x--) res += ' ';
    return res;
}

function listRoutes(){
    for (var i = 0; i < arguments.length;  i++) {
        if(arguments[i].stack instanceof Array){
            console.log('');
            arguments[i].stack.forEach(function(a){
                var route = a.route;
                if(route){
                    route.stack.forEach(function(r){
                        var method = r.method.toUpperCase();
                        console.log(method,space(8 - method.length),route.path);
                    })
                }
            });
        }
    }
}

listRoutes(router, routerAuth, routerHTML);

Output log:

GET       /isAlive
POST      /test/email
POST      /user/verify

PUT       /login
POST      /login
GET       /player
PUT       /player
GET       /player/:id
GET       /players
GET       /system
POST      /user
GET       /user
PUT       /user
DELETE    /user

GET       /
GET       /login

Jadikan ini sebagai NPM https://www.npmjs.com/package/express-list-routes

Labithiotis
sumber
1
Ini tidak bekerja seperti yang diharapkan untuk saya. app._router tampaknya tidak menyertakan rute dari app.use ('/ path', otherRouter);
Michael Cole
@MichaelCole Apakah Anda melihat jawaban di bawah ini dari Golo Roden?
Labithiotis
@ Dazzler13 Saya bermain dengan ini selama satu jam, dan tidak bisa membuatnya bekerja. Express 4.0. Aplikasi buatan, router buatan, app.use (jalur, router), rute router tidak muncul di app._router. Contoh?
Michael Cole
Contoh dari @Caleb di bawah ini berfungsi dengan baik untuk rute yang ditangani dengan sesuatu seperti express.Router jika itu masalah Anda. Perhatikan bahwa rute yang diatur dengan middleware (termasuk express.Router) mungkin tidak muncul segera dan Anda mungkin perlu menambahkan penundaan sebentar sebelum memeriksanya di app._router (bahkan menggunakan pendekatan dari @ Caleb).
Iain Collins
8

output json

function availableRoutes() {
  return app._router.stack
    .filter(r => r.route)
    .map(r => {
      return {
        method: Object.keys(r.route.methods)[0].toUpperCase(),
        path: r.route.path
      };
    });
}

console.log(JSON.stringify(availableRoutes(), null, 2));

terlihat seperti ini:

[
  {
    "method": "GET",
    "path": "/api/todos"
  },
  {
    "method": "POST",
    "path": "/api/todos"
  },
  {
    "method": "PUT",
    "path": "/api/todos/:id"
  },
  {
    "method": "DELETE",
    "path": "/api/todos/:id"
  }
]

output string

function availableRoutesString() {
  return app._router.stack
    .filter(r => r.route)
    .map(r => Object.keys(r.route.methods)[0].toUpperCase().padEnd(7) + r.route.path)
    .join("\n  ")
}

console.log(availableRoutesString());

terlihat seperti ini:

GET    /api/todos  
POST   /api/todos  
PUT    /api/todos/:id  
DELETE /api/todos/:id

ini didasarkan pada @ corvid's jawaban

semoga ini membantu

ezekills
sumber
5

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:

// index.js
[...]
var app = Express();
require(./config/routes)(app);

// ./config/routes.js
module.exports = function(app) {
    // Some static routes
    app.use('/users', [middleware], UsersRouter);
    app.use('/users/:user_id/items', [middleware], ItemsRouter);
    app.use('/otherResource', [middleware], OtherResourceRouter);
}

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):

// In printRoutes.js (or a gulp task, or whatever)
var Express = require('express')
  , app     = Express()
  , _       = require('lodash')

// Global array to store all relevant args of calls to app.use
var APP_USED = []

// Replace the `use` function to store the routers and the urls they operate on
app.use = function() {
  var urlBase = arguments[0];

  // Find the router in the args list
  _.forEach(arguments, function(arg) {
    if (arg.name == 'router') {
      APP_USED.push({
        urlBase: urlBase,
        router: arg
      });
    }
  });
};

// Let the routes function run with the stubbed app object.
require('./config/routes')(app);

// GRAB all the routes from our saved routers:
_.each(APP_USED, function(used) {
  // On each route of the router
  _.each(used.router.stack, function(stackElement) {
    if (stackElement.route) {
      var path = stackElement.route.path;
      var method = stackElement.route.stack[0].method.toUpperCase();

      // Do whatever you want with the data. I like to make a nice table :)
      console.log(method + " -> " + used.urlBase + path);
    }
  });
});

Contoh lengkap ini (dengan beberapa router CRUD dasar) baru saja diuji dan dicetak:

GET -> /users/users
GET -> /users/users/:user_id
POST -> /users/users
DELETE -> /users/users/:user_id
GET -> /users/:user_id/items/
GET -> /users/:user_id/items/:item_id
PUT -> /users/:user_id/items/:item_id
POST -> /users/:user_id/items/
DELETE -> /users/:user_id/items/:item_id
GET -> /otherResource/
GET -> /otherResource/:other_resource_id
POST -> /otherResource/
DELETE -> /otherResource/:other_resource_id

Menggunakan cli-table saya mendapatkan sesuatu seperti ini:

┌────────┬───────────────────────┐
         => Users              
├────────┼───────────────────────┤
 GET     /users/users          
├────────┼───────────────────────┤
 GET     /users/users/:user_id 
├────────┼───────────────────────┤
 POST    /users/users          
├────────┼───────────────────────┤
 DELETE  /users/users/:user_id 
└────────┴───────────────────────┘
┌────────┬────────────────────────────────┐
         => Items                       
├────────┼────────────────────────────────┤
 GET     /users/:user_id/items/         
├────────┼────────────────────────────────┤
 GET     /users/:user_id/items/:item_id 
├────────┼────────────────────────────────┤
 PUT     /users/:user_id/items/:item_id 
├────────┼────────────────────────────────┤
 POST    /users/:user_id/items/         
├────────┼────────────────────────────────┤
 DELETE  /users/:user_id/items/:item_id 
└────────┴────────────────────────────────┘
┌────────┬───────────────────────────────────┐
         => OtherResources                 
├────────┼───────────────────────────────────┤
 GET     /otherResource/                   
├────────┼───────────────────────────────────┤
 GET     /otherResource/:other_resource_id 
├────────┼───────────────────────────────────┤
 POST    /otherResource/                   
├────────┼───────────────────────────────────┤
 DELETE  /otherResource/:other_resource_id 
└────────┴───────────────────────────────────┘

Yang menendang pantat.

Yann Vanhalewyn
sumber
4

Express 4

Diberikan konfigurasi Express 4 dengan titik akhir dan router bersarang

const express = require('express')
const app = express()
const router = express.Router()

app.get(...)
app.post(...)

router.use(...)
router.get(...)
router.post(...)

app.use(router)

Memperluas jawaban @caleb dimungkinkan untuk mendapatkan semua rute secara rekursif dan diurutkan.

getRoutes(app._router && app._router.stack)
// =>
// [
//     [ 'GET', '/'], 
//     [ 'POST', '/auth'],
//     ...
// ]

/**
* Converts Express 4 app routes to an array representation suitable for easy parsing.
* @arg {Array} stack An Express 4 application middleware list.
* @returns {Array} An array representation of the routes in the form [ [ 'GET', '/path' ], ... ].
*/
function getRoutes(stack) {
        const routes = (stack || [])
                // We are interested only in endpoints and router middleware.
                .filter(it => it.route || it.name === 'router')
                // The magic recursive conversion.
                .reduce((result, it) => {
                        if (! it.route) {
                                // We are handling a router middleware.
                                const stack = it.handle.stack
                                const routes = getRoutes(stack)

                                return result.concat(routes)
                        }

                        // We are handling an endpoint.
                        const methods = it.route.methods
                        const path = it.route.path

                        const routes = Object
                                .keys(methods)
                                .map(m => [ m.toUpperCase(), path ])

                        return result.concat(routes)
                }, [])
                // We sort the data structure by route path.
                .sort((prev, next) => {
                        const [ prevMethod, prevPath ] = prev
                        const [ nextMethod, nextPath ] = next

                        if (prevPath < nextPath) {
                                return -1
                        }

                        if (prevPath > nextPath) {
                                return 1
                        }

                        return 0
                })

        return routes
}

Untuk output string dasar.

infoAboutRoutes(app)

Output konsol

/**
* Converts Express 4 app routes to a string representation suitable for console output.
* @arg {Object} app An Express 4 application
* @returns {string} A string representation of the routes.
*/
function infoAboutRoutes(app) {
        const entryPoint = app._router && app._router.stack
        const routes = getRoutes(entryPoint)

        const info = routes
                .reduce((result, it) => {
                        const [ method, path ] = it

                        return result + `${method.padEnd(6)} ${path}\n`
                }, '')

        return info
}

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.

const subApp = express()
app.use('/sub/app', subApp)

const subRouter = express.Router()
app.use('/sub/route', subRouter)
Daniele Orlando
sumber
Daftar rute yang dipasang bekerja dengan paket ini: github.com/AlbertoFdzM/express-list-endpoints
jsaddwater
4

Perlu beberapa penyesuaian tetapi harus bekerja untuk Express v4. Termasuk rute-rute yang ditambahkan dengan .use().

function listRoutes(routes, stack, parent){

  parent = parent || '';
  if(stack){
    stack.forEach(function(r){
      if (r.route && r.route.path){
        var method = '';

        for(method in r.route.methods){
          if(r.route.methods[method]){
            routes.push({method: method.toUpperCase(), path: parent + r.route.path});
          }
        }       

      } else if (r.handle && r.handle.name == 'router') {
        const routerName = r.regexp.source.replace("^\\","").replace("\\/?(?=\\/|$)","");
        return listRoutes(routes, r.handle.stack, parent + routerName);
      }
    });
    return routes;
  } else {
    return listRoutes([], app._router.stack);
  }
}

//Usage on app.js
const routes = listRoutes(); //array: ["method: path", "..."]

sunting: peningkatan kode

lssanches
sumber
3

Pendekatan yang sedikit diperbarui dan lebih fungsional untuk jawaban @ prranay:

const routes = app._router.stack
    .filter((middleware) => middleware.route)
    .map((middleware) => `${Object.keys(middleware.route.methods).join(', ')} -> ${middleware.route.path}`)

console.log(JSON.stringify(routes, null, 4));
SeedyROM
sumber
2

Ini berhasil untuk saya

let routes = []
app._router.stack.forEach(function (middleware) {
    if(middleware.route) {
        routes.push(Object.keys(middleware.route.methods) + " -> " + middleware.route.path);
    }
});

console.log(JSON.stringify(routes, null, 4));

O / P:

[
    "get -> /posts/:id",
    "post -> /posts",
    "patch -> /posts"
]
praray
sumber
2

Inisialisasi router kilat

let router = require('express').Router();
router.get('/', function (req, res) {
    res.json({
        status: `API Its Working`,
        route: router.stack.filter(r => r.route)
           .map(r=> { return {"path":r.route.path, 
 "methods":r.route.methods}}),
        message: 'Welcome to my crafted with love!',
      });
   });   

Mengontrol pengontrol pengguna

var userController = require('./controller/userController');

Rute pengguna

router.route('/users')
   .get(userController.index)
   .post(userController.new);
router.route('/users/:user_id')
   .get(userController.view)
   .patch(userController.update)
   .put(userController.update)
   .delete(userController.delete);

Ekspor rute API

module.exports = router;

Keluaran

{"status":"API Its Working, APP Route","route": 
[{"path":"/","methods":{"get":true}}, 
{"path":"/users","methods":{"get":true,"post":true}}, 
{"path":"/users/:user_id","methods": ....}
Chandan Kumar Singh
sumber
1

Pada Express 3.5.x, saya menambahkan ini sebelum memulai aplikasi untuk mencetak rute di terminal saya:

var routes = app.routes;
for (var verb in routes){
    if (routes.hasOwnProperty(verb)) {
      routes[verb].forEach(function(route){
        console.log(verb + " : "+route['path']);
      });
    }
}

Mungkin itu bisa membantu ...

David Manson
sumber
1

Anda dapat menerapkan /get-all-routesAPI:

const express = require("express");
const app = express();

app.get("/get-all-routes", (req, res) => {  
  let get = app._router.stack.filter(r => r.route && r.route.methods.get).map(r => r.route.path);
  let post = app._router.stack.filter(r => r.route && r.route.methods.post).map(r => r.route.path);
  res.send({ get: get, post: post });
});

const listener = app.listen(process.env.PORT, () => {
  console.log("Your app is listening on port " + listener.address().port);
});

Berikut ini adalah demo: https://glitch.com/edit/#!/get-all-routes-in-nodejs

fmma
sumber
0

Jadi saya melihat semua jawaban .. paling tidak suka .. mengambil beberapa dari beberapa .. membuat ini:

const resolveRoutes = (stack) => {
  return stack.map(function (layer) {
    if (layer.route && layer.route.path.isString()) {
      let methods = Object.keys(layer.route.methods);
      if (methods.length > 20)
        methods = ["ALL"];

      return {methods: methods, path: layer.route.path};
    }

    if (layer.name === 'router')  // router middleware
      return resolveRoutes(layer.handle.stack);

  }).filter(route => route);
};

const routes = resolveRoutes(express._router.stack);
const printRoute = (route) => {
  if (Array.isArray(route))
    return route.forEach(route => printRoute(route));

  console.log(JSON.stringify(route.methods) + " " + route.path);
};

printRoute(routes);

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 ..

TacB0sS
sumber
0

perincian rute mencantumkan rute untuk "express": "4.xx",

import {
  Router
} from 'express';
var router = Router();

router.get("/routes", (req, res, next) => {
  var routes = [];
  var i = 0;
  router.stack.forEach(function (r) {
    if (r.route && r.route.path) {
      r.route.stack.forEach(function (type) {
        var method = type.method.toUpperCase();
        routes[i++] = {
          no:i,
          method: method.toUpperCase(),
          path: r.route.path
        };
      })
    }
  })

  res.send('<h1>List of routes.</h1>' + JSON.stringify(routes));
});

OUTPUT KODE SEDERHANA

List of routes.

[
{"no":1,"method":"POST","path":"/admin"},
{"no":2,"method":"GET","path":"/"},
{"no":3,"method":"GET","path":"/routes"},
{"no":4,"method":"POST","path":"/student/:studentId/course/:courseId/topic/:topicId/task/:taskId/item"},
{"no":5,"method":"GET","path":"/student/:studentId/course/:courseId/topic/:topicId/task/:taskId/item"},
{"no":6,"method":"PUT","path":"/student/:studentId/course/:courseId/topic/:topicId/task/:taskId/item/:itemId"},
{"no":7,"method":"DELETE","path":"/student/:studentId/course/:courseId/topic/:topicId/task/:taskId/item/:itemId"}
]
lasitha edirisooriya
sumber
0

Cukup gunakan paket npm ini, itu akan memberikan output web serta output terminal dalam tampilan tabel diformat bagus.

masukkan deskripsi gambar di sini

https://www.npmjs.com/package/express-routes-catalogue

NaveenDA
sumber
2
Paket lainnya ini memiliki banyak penerimaan. npmjs.com/package/express-list-endpoints . Aku 21,111 terhadap 34 unduhan mingguan. Namun, express-routes-cataloguejuga menampilkan rute sebagai HTML, sedangkan yang lainnya tidak.
mayid
1
tidak buruk, dokumentasi paket berbeda dari nama paket yang sebenarnya ketika membutuhkan dan paket ini seperti semua yang disebutkan lainnya hanya menunjukkan rute lapisan tunggal di mana termasuk
hamza khan
@hamzakhan ps terima kasih atas pembaruannya. Saya penulisnya, segera akan diperbarui dalam dokumentasi.
Vijay
-1

Berikut ini adalah fungsi satu-baris untuk mencetak rute dengan cantik di Ekspres app:

const getAppRoutes = (app) => app._router.stack.reduce(
  (acc, val) => acc.concat(
    val.route ? [val.route.path] :
      val.name === "router" ? val.handle.stack.filter(
        x => x.route).map(
          x => val.regexp.toString().match(/\/[a-z]+/)[0] + (
            x.route.path === '/' ? '' : x.route.path)) : []) , []).sort();
bungkuk
sumber
-2

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:

- middleware 1
- middleware 2
- Route /thing/
- - middleware 3
- - controller (HTTP VERB)  
ErisDS
sumber