【问题标题】:How to get list of all routes I am using in restify server如何获取我在 restify 服务器中使用的所有路由的列表
【发布时间】:2019-08-20 16:07:38
【问题描述】:

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

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

现在每个路由文件看起来像 belwo

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


    【解决方案1】:

    试试这样的

    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 应该很容易:)

    【讨论】:

      【解决方案2】:

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

      或者,您可以将所有路由作为数组访问,然后映射它们,如果您使用 better-console 之类的库在 node.js 中为您提供 console.table 会更好。以下内容在restify@8.3.0 中对我很有效:

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

      【讨论】:

        【解决方案3】:

        2019 年更新:server.router.routes 不再可用,而我们有 server.router.getRoutes() 返回地图。因此我们可以使用以下命令记录所有路由:

        function listAllRoutes(server) {
          Object.values(server.router.getRoutes()).forEach(value =>
            console.log(
              `ENDPOINT REGISTERED :: ${value.method} :: ${server.url}${value.path}`
            )
          );
        }
        

        http://restify.com/docs/server-api/#server

        【讨论】:

          猜你喜欢
          • 2016-11-06
          • 2013-04-03
          • 1970-01-01
          • 2015-06-09
          • 2021-12-28
          • 1970-01-01
          • 1970-01-01
          • 2013-04-05
          相关资源
          最近更新 更多