如何获取我在restify服务器中使用的所有路由的列表

问题描述 投票:1回答:2

我有一个如下设计的应用程序;

//server.js =====================================================
var restify = require('restify'),
    route1 = require('./routes/route1),
    route2 = require('./routes/route2),
    ....
    ....
    ....

var server = restify.createServer({
    name: 'xyz_server'
  });

route1(server);
route2(server);

现在每个路径文件如下所示

   //route1.js =====================================================

   module.exports = function(server) {
      server.get('/someRoute',function(req,res,next){
                //.. do something
        });
      server.get('/anotherRoute',function(req,res,next){
                 //..something else
       });

   }; 

现在的问题是我们总共有数十个路径文件和数百条路线。有多个开发人员正在处理这个项目,每天都会添加几个路由。

在restify中有一个函数给我一个系统中所有路由的列表吗?

我正在寻找的是:

server.listAllRoutes();

有人知道吗?

node.js restify
2个回答
4
投票

尝试这样的事情

function listAllRoutes(server){
  console.log('GET paths:');
  server.router.routes.GET.forEach(
    function(value){console.log(value.spec.path);}
    );
  console.log('PUT paths:');
  server.router.routes.PUT.forEach(
    function(value){console.log(value.spec.path);}
    );
}

listAllRoutes(server);

这应列出所有GET和PUT路径,添加POST和DELETE应该很容易:)


0
投票

有一个router.getRoutes()方法,但它返回一个对于列出事物不是最好的对象。你可以摆弄它,把它变成一个你喜欢的形状的数组。

或者,你可以作为一个数组访问所有路由,然后映射它们,如果你使用像better-console这样的lib来给你节点中的console.table,那就更好了。以下在[email protected]中为我工作得很好:

import console from 'better-console';

function listRoutes(server) {
  const { routes } = server.router._registry._findMyWay; // beware these are probably meant to be private APIs, they could be subject to change
  const mapped = routes.map(({ method, path }) => ({ method, path }));

  console.table(mapped.sort((a, b) => a.method > b.method));
}
© www.soinside.com 2019 - 2024. All rights reserved.