Comment obtenir tous les itinéraires enregistrés dans Express?


181

J'ai une application Web créée à l'aide de Node.js et Express. Maintenant, je voudrais lister toutes les routes enregistrées avec leurs méthodes appropriées.

Par exemple, si j'ai exécuté

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

Je voudrais récupérer un objet (ou quelque chose d'équivalent) tel que:

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

Est-ce possible, et si oui comment?


MISE À JOUR: Pendant ce temps, j'ai créé un package npm appelé get-routes qui extrait les routes d'une application donnée, ce qui résout ce problème. Actuellement, seul Express 4.x est pris en charge, mais je suppose que pour l'instant, c'est très bien. Juste FYI.


Toutes les solutions que j'ai essayées ne fonctionnent pas lorsque vous avez défini des routeurs. Cela ne fonctionne que par itinéraire - ce qui ne me donne pas l'URL complète de cet itinéraire dans mon application ...
guy mograbi

1
@guymograbi, vous voudrez peut-être consulter stackoverflow.com/a/55589657/6693775
nbsamar le

Réponses:


230

express 3.x

D'accord, je l'ai trouvé moi-même ... c'est juste app.routes:-)

express 4.x

Applications - construites avecexpress()

app._router.stack

Routeurs - construits avecexpress.Router()

router.stack

Remarque : La pile inclut également les fonctions middleware, elle doit être filtrée pour obtenir uniquement les "routes" .


J'utilise le nœud 0.10 et c'était app.routes.routes- ce qui signifie que je pourrais faire JSON.stringify (app.routes.routes)
guy mograbi

7
Fonctionne uniquement pour Express 3.x, pas 4.x. Dans 4.x, vous devriez vérifierapp._router.stack
avetisk

14
Cela n'a pas fonctionné comme prévu pour moi. app._router ne semble pas inclure les routes de app.use ('/ path', otherRouter);
Michael Cole

Existe-t-il un moyen d'intégrer cela à un script de ligne de commande qui extraire exactement les mêmes fichiers d'itinéraire que l'application en direct sans démarrer réellement une application Web?
Lawrence I. Siden

5
Au moins dans express 4.13.1 app._router.stackn'est pas défini.
levigroker

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

1
Notez que si vous utilisez quelque chose comme Express Router (ou un autre middleware), vous devriez voir @Caleb une réponse légèrement plus longue qui étend cette approche.
Iain Collins

31

Cela obtient les routes enregistrées directement sur l'application (via app.VERB) et les routes enregistrées en tant que middleware de routeur (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}}

1
Excellent, merci pour un exemple qui montre comment obtenir des itinéraires d'affichage définis via un middleware comme le routeur Express.
Iain Collins

31

J'ai adapté un ancien article qui n'est plus en ligne pour mes besoins. J'ai utilisé express.Router () et enregistré mes routes comme ceci:

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

J'ai renommé le fichier document.js dans apiTable.js et je l'ai adapté comme ceci:

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

alors je l'appelle dans mon server.js comme ceci:

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

Le résultat ressemble à ceci:

Exemple de résultat

C'est juste un exemple mais cela pourrait être utile ... j'espère ...


2
Cela ne fonctionne pas pour les routes imbriquées identifiées ici: stackoverflow.com/questions/25260818/…

2
Méfiez-vous du lien dans cette réponse! Cela m'a redirigé vers un site Web aléatoire et a forcé un téléchargement sur mon ordinateur.
Tyler Bell

29

Voici une petite chose que j'utilise juste pour obtenir les chemins enregistrés dans 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

où mettez-vous cela, dans app.js ??
Juan

21

DEBUG=express:* node index.js

Si vous exécutez votre application avec la commande ci-dessus, elle lancera votre application avec le DEBUGmodule et donnera des itinéraires, ainsi que toutes les fonctions middleware en cours d'utilisation.

Vous pouvez vous référer: ExpressJS - Débogage et débogage .


3
De loin la meilleure réponse ... un env var!
Jeef le

En effet, la réponse la plus utile. @nbsamar Vous pouvez même le développer pour dire à utiliser DEBUG=express:pathspour voir uniquement la sortie du chemin et pas tous les autres messages de débogage. Merci!
Mark Edington

19

Hacky copier / coller une réponse gracieuseté de Doug Wilson sur les problèmes express de github . Sale mais fonctionne comme un charme.

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

Produit

capture d'écran


Pourquoi les itinéraires ne sont-ils pas distincts?
Vladimir Vukanac

1
C'est le seul qui a fonctionné pour moi avec Express 4.15. Aucun des autres n'a donné le chemin complet. La seule mise en garde est qu'il ne rend pas le chemin racine par défaut / - aucun d'entre eux ne le fait.
Shane

Je ne comprends pas pourquoi liez-vous des arguments print?
ZzZombo

@ZzZombo demande à Doug Wilson, il l'a écrit. Vous pouvez probablement nettoyer tout cela si vous le souhaitez.
AlienWebguy

11

https://www.npmjs.com/package/express-list-endpoints fonctionne plutôt bien.

Exemple

Usage:

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

Production:

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

2
Cela ne fonctionne pas avec: server = express(); app1 = express(); server.use('/app1', app1); ...
Danosaure

8

Une fonction pour enregistrer toutes les routes dans express 4 (peut être facilement modifiée pour la 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);

Sortie des journaux:

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

Faites-en un NPM https://www.npmjs.com/package/express-list-routes


1
Cela n'a pas fonctionné comme prévu pour moi. app._router ne semble pas inclure les routes de app.use ('/ path', otherRouter);
Michael Cole

@MichaelCole Avez-vous regardé la réponse ci-dessous de Golo Roden?
Labithiotis

@ Dazzler13 J'ai joué avec ça pendant une heure et je n'ai pas pu le faire fonctionner. Express 4.0. Application créée, routeur créé, app.use (chemin, routeur), les routes du routeur n'apparaissaient pas dans app._router. Exemple?
Michael Cole

L'exemple de @Caleb ci-dessous fonctionne bien pour les routes gérées avec quelque chose comme express.Router si c'est votre problème. Notez que les routes définies avec le middleware (y compris express.Router) peuvent ne pas apparaître tout de suite et vous devrez peut-être ajouter un court délai avant de les vérifier dans app._router (même en utilisant l'approche de @Caleb).
Iain Collins

8

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

ressemble à ça:

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

sortie de chaîne

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

ressemble à ça:

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

ceux-ci sont basés sur la réponse de @ corvid

J'espère que cela t'aides


5

J'ai été inspiré par les routes express-list-routes de Labithiotis, mais je voulais un aperçu de toutes mes routes et URL brutes en une seule fois, et ne pas spécifier de routeur, et trouver le préfixe à chaque fois. Quelque chose que j'ai proposé était de simplement remplacer la fonction app.use par ma propre fonction qui stocke la baseUrl et le routeur donné. De là, je peux imprimer n'importe quel tableau de tous mes itinéraires.

REMARQUE cela fonctionne pour moi car je déclare mes routes dans un fichier (fonction) de routes spécifique qui est passé dans l'objet d'application, comme ceci:

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

Cela me permet de passer dans un autre objet 'app' avec une fausse fonction d'utilisation, et je peux obtenir TOUTES les routes. Cela fonctionne pour moi (supprimé une vérification d'erreur pour plus de clarté, mais fonctionne toujours pour l'exemple):

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

Cet exemple complet (avec certains routeurs CRUD de base) vient d'être testé et imprimé:

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

En utilisant cli-table, j'ai quelque chose comme ceci:

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

Ce qui frappe le cul.


4

Express 4

Étant donné une configuration Express 4 avec des points de terminaison et des routeurs imbriqués

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

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

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

app.use(router)

En développant la réponse @caleb, il est possible d'obtenir toutes les routes de manière récursive et triées.

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
}

Pour la sortie de chaîne de base.

infoAboutRoutes(app)

Sortie de la 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
}

Mise à jour 1:

En raison des limitations internes d'Express 4, il n'est pas possible de récupérer l'application montée et les routeurs montés. Par exemple, il n'est pas possible d'obtenir des routes à partir de cette configuration.

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

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

La liste des routes montées fonctionne avec ce package: github.com/AlbertoFdzM/express-list-endpoints
jsaddwater

4

Besoin de quelques ajustements mais devrait fonctionner pour Express v4. Y compris les itinéraires ajoutés avec .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", "..."]

modifier: améliorations du code


3

Approche légèrement mise à jour et plus fonctionnelle de la réponse de @ 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

Cela a fonctionné pour moi

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

2

Initialiser le routeur express

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

Importer le contrôleur utilisateur

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

Itinéraires utilisateur

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

Exporter les routes API

module.exports = router;

Production

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

1

Sur Express 3.5.x, j'ajoute ceci avant de démarrer l'application pour imprimer les itinéraires sur mon terminal:

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

Peut-être que cela peut aider ...


1

Vous pouvez implémenter une /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);
});

Voici une démo: https://glitch.com/edit/#!/get-all-routes-in-nodejs


Obs: Cela ne fonctionne pas avec express 'Router ()
Gustavo Morais il y a

0

Donc, je regardais toutes les réponses ... je n'aimais pas le plus ... j'en ai pris quelques-unes ... j'ai fait ceci:

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

pas la plus jolie ... mais imbriquée, et fait l'affaire

notez aussi le 20 là-bas ... Je suppose juste qu'il n'y aura pas de route normale avec 20 méthodes .. donc je déduis que c'est tout ..


0

les détails de l'itinéraire indiquent l'itinéraire pour «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));
});

SORTIE SIMPLE DE CODE

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

Utilisez simplement ce package npm, il donnera la sortie Web ainsi que la sortie du terminal dans une belle vue de table formatée.

entrez la description de l'image ici

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


2
Cet autre paquet a beaucoup plus d'acceptation. npmjs.com/package/express-list-endpoints . Je suis 21.111 contre 34 téléchargements hebdomadaires. Cependant, express-routes-catalogueaffiche également les itinéraires au format HTML, contrairement à l'autre.
Mayid

1
pas mal, la documentation du paquet diffère du nom réel du paquet lors de la demande et ce paquet, comme tous les autres mentionnés, n'affiche que les routes à couche unique où il est inclus
hamza khan

@hamzakhan ps merci pour la mise à jour. Je suis l'auteur, sera bientôt mis à jour dans la documentation.
Vijay le

-1

Voici une fonction en une ligne pour imprimer les itinéraires dans 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

J'ai publié un package qui imprime tous les middleware ainsi que les routes, vraiment utile lorsque vous essayez d'auditer une application express. Vous montez le package en tant que middleware, donc il s'imprime même:

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

Il imprime une sorte d'arbre comme:

- middleware 1
- middleware 2
- Route /thing/
- - middleware 3
- - controller (HTTP VERB)  
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.