Come ottenere tutti i percorsi registrati in Express?


181

Ho un'applicazione web creata usando Node.js ed Express. Ora vorrei elencare tutti i percorsi registrati con i loro metodi appropriati.

Ad esempio, se ho eseguito

app.get('/', function (...) { ... });
app.get('/foo/:id', function (...) { ... });
app.post('/foo/:id', function (...) { ... });

Vorrei recuperare un oggetto (o qualcosa di equivalente a quello) come:

{
  get: [ '/', '/foo/:id' ],
  post: [ '/foo/:id' ]
}

È possibile, e se sì, come?


AGGIORNAMENTO: Nel frattempo, ho creato un pacchetto npm chiamato get-route che estrae i percorsi da una determinata applicazione, risolvendo questo problema. Attualmente è supportato solo Express 4.x, ma suppongo che per ora vada bene. Cordiali saluti.


Tutte le soluzioni che ho provato non funzionano quando sono definiti i router. Funziona solo per route - il che non mi dà l'intero URL per quella route nella mia app ...
guy mograbi

1
@guymograbi si potrebbe desiderare di guardare stackoverflow.com/a/55589657/6693775
nbsamar

Risposte:


230

espresso 3.x

Ok, l'ho trovato da solo ... è solo app.routes:-)

espresso 4.x

Applicazioni - costruite conexpress()

app._router.stack

Router : costruito conexpress.Router()

router.stack

Nota : lo stack include anche le funzioni del middleware, dovrebbe essere filtrato per ottenere solo i "percorsi" .


Sto usando il nodo 0.10 ed è stato app.routes.routes- il che significa che potrei fare JSON.stringify (app.routes.routes)
guy mograbi

7
Funziona solo con Express 3.x, non 4.x. In 4.x, dovresti controllareapp._router.stack
avetisk il

14
Questo non ha funzionato come previsto per me. app._router non sembra includere route da app.use ('/ path', otherRouter);
Michael Cole,

Esiste un modo per integrarlo con uno script da riga di comando che inserisca esattamente gli stessi file di route che l'app live esegue senza avviare effettivamente un'app Web?
Lawrence I. Siden,

5
Almeno in Express 4.13.1 app._router.stacknon è definito.
levigroker,

54
app._router.stack.forEach(function(r){
  if (r.route && r.route.path){
    console.log(r.route.path)
  }
})

1
Nota che se stai usando qualcosa come Express Router (o altro middleware) dovresti vedere @Caleb una risposta leggermente più lunga che si espande su questo approccio.
Iain Collins,

31

In questo modo i percorsi vengono registrati direttamente sull'app (tramite app.VERB) e i percorsi registrati come middleware del router (tramite 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}}

1
Eccellente, grazie per un esempio che mostra come impostare i percorsi di visualizzazione tramite middleware come il router Express.
Iain Collins,

31

Ho adattato un vecchio post che non è più online per le mie esigenze. Ho usato express.Router () e registrato i miei percorsi in questo modo:

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

Ho rinominato il file document.js in apiTable.js e l'ho adattato in questo modo:

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;
};

quindi lo chiamo nel mio server.js in questo modo:

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

Il risultato è simile al seguente:

Esempio di risultato

È solo un esempio ma potrebbe essere utile .. spero ..


2
Questo non funziona per i percorsi nidificati individuate qui: stackoverflow.com/questions/25260818/...

2
Fai attenzione al link in questa risposta! Mi ha reindirizzato a un sito Web casuale e ha costretto un download sul mio computer.
Tyler Bell,

29

Ecco una piccola cosa che uso solo per ottenere i percorsi registrati in 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

console.log (server._router.stack.map (r => r.route) .filter (r => r) .map (r => ${Object.keys(r.methods).join(', ')} ${r.path}))
standup75

dove lo metti, in app.js ??
Juan,

21

DEBUG=express:* node index.js

Se esegui la tua app con il comando sopra, avvia la tua app con il DEBUGmodulo e fornisce route, oltre a tutte le funzioni del middleware in uso.

È possibile fare riferimento: ExpressJS - Debug e debug .


3
Di gran lunga la migliore risposta ... un env var!
Jeef il

Anzi, la risposta più utile. @nbsamar Potresti anche espanderlo per dire di usare solo DEBUG=express:pathsper vedere l'output del percorso e non tutti gli altri messaggi di debug. Grazie!
Mark Edington,

19

Hacky copia / incolla risposta per gentile concessione di Doug Wilson sulle questioni espresse su github . Sporco ma funziona come un fascino.

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, []))

produce

Screengrab


Perché i percorsi non sono distinti?
Vladimir Vukanac,

1
Questo è l'unico che ha funzionato per me con Express 4.15. Nessuno degli altri ha dato il percorso completo. L'unica avvertenza è che non restituisce il percorso root predefinito / - nessuno di loro lo fa.
Shane,

Non capisco perché vincoli gli argomenti print?
ZzZombo,

@ZzZombo chiedi a Doug Wilson, l'ha scritto. Probabilmente puoi ripulire tutto questo se vuoi.
AlienWebguy,

11

https://www.npmjs.com/package/express-list-endpoints funziona abbastanza bene.

Esempio

Uso:

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

Produzione:

[ { path: '*', methods: [ 'OPTIONS' ] },
  { path: '/', methods: [ 'GET' ] },
  { path: '/sessions', methods: [ 'POST' ] },
  { path: '/sessions', methods: [ 'DELETE' ] },
  { path: '/users', methods: [ 'GET' ] },
  { path: '/users', methods: [ 'POST' ] } ]

2
Questo non funziona con: server = express(); app1 = express(); server.use('/app1', app1); ...
Danosaure,

8

Una funzione per registrare tutti i percorsi in Express 4 (può essere facilmente ottimizzata per 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);

Uscita registri:

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

Trasformato in un NPM https://www.npmjs.com/package/express-list-routes


1
Questo non ha funzionato come previsto per me. app._router non sembra includere route da app.use ('/ path', otherRouter);
Michael Cole,

@MichaelCole Hai guardato la risposta qui sotto di Golo Roden?
Labithiotis,

@ Dazzler13 Ci ho giocato per un'ora e non sono riuscito a farlo funzionare. Express 4.0. L'app creata, il router creato, l'app.use (percorso, router), i percorsi del router non sono stati visualizzati in app._router. Esempio?
Michael Cole,

L'esempio di @Caleb di seguito funziona bene per i percorsi gestiti con qualcosa di simile a express.Router se questo è il tuo problema. Si noti che i percorsi impostati con il middleware (incluso express.Router) potrebbero non essere visualizzati immediatamente e potrebbe essere necessario aggiungerlo in breve tempo prima di verificarli in app._router (anche utilizzando l'approccio di @Caleb).
Iain Collins,

8

uscita 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));

Somiglia a questo:

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

uscita stringa

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());

Somiglia a questo:

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

questi sono basati sulla risposta di @ corvid

spero che questo ti aiuti


5

Sono stato ispirato dalle rotte di elenchi espressi di Labithiotis, ma volevo una panoramica di tutte le mie rotte e degli URL brutali in una volta sola, senza specificare un router e capire ogni volta il prefisso. Qualcosa che mi è venuto in mente è stato semplicemente di sostituire la funzione app.use con la mia funzione che memorizza baseUrl e dato router. Da lì posso stampare qualsiasi tabella di tutti i miei percorsi.

NOTA questo funziona per me perché dichiaro le mie rotte in un file (funzione) di rotte specifico che viene passato nell'oggetto app, in questo modo:

// 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);
}

Questo mi permette di passare un altro oggetto 'app' con una funzione di uso falso e posso ottenere TUTTI i percorsi. Questo funziona per me (rimosso alcuni errori nel controllo della chiarezza, ma funziona ancora per l'esempio):

// 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);
    }
  });
});

Questo esempio completo (con alcuni router CRUD di base) è stato appena testato e stampato:

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

Usando il cli-table ho ottenuto qualcosa del genere:

┌────────┬───────────────────────┐
         => 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 
└────────┴───────────────────────────────────┘

Che prende a calci in culo.


4

Express 4

Data una configurazione Express 4 con endpoint e router nidificati

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

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

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

app.use(router)

Espandendo la risposta @caleb è possibile ottenere tutti i percorsi in modo ricorsivo e ordinati.

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
}

Per un output di stringa di base.

infoAboutRoutes(app)

Uscita console

/**
* 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
}

Aggiornamento 1:

A causa delle limitazioni interne di Express 4 non è possibile recuperare app montate e router montati. Ad esempio, non è possibile ottenere percorsi da questa configurazione.

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

const subRouter = express.Router()
app.use('/sub/route', subRouter)

L'elenco delle rotte montate funziona con questo pacchetto: github.com/AlbertoFdzM/express-list-endpoints
jsaddwater

4

Hai bisogno di alcune regolazioni, ma dovrebbe funzionare con Express v4. Compresi quei percorsi aggiunti con .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", "..."]

modifica: miglioramenti del codice


3

Approccio leggermente aggiornato e più funzionale alla risposta di @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));

2

Questo ha funzionato per me

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

OPERAZIONE:

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

2

Inizializza il router espresso

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!',
      });
   });   

Importa controller utente

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

Percorsi utente

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

Esporta percorsi API

module.exports = router;

Produzione

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

1

Su Express 3.5.x, aggiungo questo prima di avviare l'app per stampare i percorsi sul mio terminale:

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

Forse può aiutare ...


1

È possibile implementare /get-all-routesun'API:

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);
});

Ecco una demo: https://glitch.com/edit/#!/get-all-routes-in-nodejs


0

Quindi stavo guardando tutte le risposte .. non mi è piaciuta di più .. ne ho prese alcune da alcuni ... fatto questo:

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

non il più bello .. ma nidificato, e fa il trucco

nota anche il 20 lì ... suppongo che non ci sarà un percorso normale con 20 metodi .. quindi deduco che sia tutto ..


0

i dettagli del percorso elencano il percorso per "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));
});

SEMPLICE USCITA DEL CODICE

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"}
]

0

Basta usare questo pacchetto npm, fornirà l'output Web e l'output del terminale in una bella vista formattata della tabella.

inserisci qui la descrizione dell'immagine

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


2
Questo altro pacchetto ha molta più accettazione. npmjs.com/package/express-list-endpoints . Sono 21.111 contro 34 download settimanali. Tuttavia, express-routes-cataloguevisualizza anche i percorsi come HTML, mentre l'altro no.
maggio

1
non male, la documentazione del pacchetto differisce dal nome del pacchetto effettivo quando richiesto e questo pacchetto, come tutti gli altri citati, mostra solo percorsi a strato singolo dove è incluso
hamza khan

@hamzakhan ps grazie per l'aggiornamento. Sono l'autore, presto sarò aggiornato nella documentazione.
Vijay,

-1

Ecco una funzione di una riga per stampare in modo grazioso i percorsi in un Express 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();

-2

Ho pubblicato un pacchetto che stampa tutto il middleware e le route, molto utile quando si tenta di controllare un'applicazione espressa. Montate il pacchetto come middleware, quindi stampa anche se stesso:

https://github.com/ErisDS/middleware-stack-printer

Stampa una specie di albero come:

- middleware 1
- middleware 2
- Route /thing/
- - middleware 3
- - controller (HTTP VERB)  
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.