【问题标题】:Is there a way to view all routes in a Hapi server有没有办法查看 Hapi 服务器中的所有路由
【发布时间】:2014-12-02 07:43:22
【问题描述】:

我们正在开发一个 node.js Hapi 服务器,该服务器从 MongoDB 数据库中提取路由列表并设置所述路由以进行服务。这样一来,服务器可能会因为数据库中的重复路由条目而失败。

我尝试查看,但未能找到在 Hapi 中检查重复路线的方法。

是否可以获得 Hapi 服务器当前正在服务的路由列表?

在尝试构建来自 MongoDB 的路由时,我可以进行比标准 try/catch 块更漂亮的错误检查吗?

设置路由的代码如下;请在代码中查看我的 cmets,了解我需要在哪里处理错误。

MySchema.find({}, function (err, stubs) {
    if (err) {
        console.log('error while loading');
        return;
    }

    for (var i = 0; i < stubs.length; i++) {
        var bodyMessage = stubs[i].body;

        // This is where we can fail, if only I could make a 
        // check for the route here
        server.route({
            method:  stubs[i].method,
            path: stubs[i].path,

            handler: function (request, reply) {
                reply(bodyMessage);
            }
        });
    }

});

【问题讨论】:

  • 也许server.table() 会帮助你?它返回路由表的副本。
  • 谢谢@RodrigoMedeiros,我今晚会试试这个,如果它有效,请告诉你。如果是这样,您应该将其发布为答案!
  • 成功了!我现在可以通过 server.table()[i].path 等访问它。 @RodrigoMedeiros

标签: node.js mongodb hapijs


【解决方案1】:

也许server.table() 会帮助你?它返回路由表的副本。来自文档页面的示例:

var table = server.table()
console.log(table);

/*  Output:

    [{
      method: 'get',
      path: '/test/{p}/end',
      settings: {
        handler: [Function],
        method: 'get',
        plugins: {},
        app: {},
        validate: {},
        payload: { output: 'stream' },
        auth: undefined,
        cache: [Object] }
    }] */

【讨论】:

    【解决方案2】:

    我使用的是 Hapi 15.1.1 版 这对我有用:

     // server.select if you have more than one connection
     const table = server.select('api').table();
     let routes = [];
     table[0].table.forEach((route) => { 
       // you can push here the route to routes array
       routes.push(route);
     });
    

    【讨论】:

      【解决方案3】:

      要修改特定路由,您可以使用连接 obj 中的 .match() 方法按键查找它们。

      var routeObj = server.connections[0].match('get', '/example', '<optional host>')
      routeObj.settings.handler = function(req, reply){
        reply({"statusCode":404,"error":"Not Found"})
      }
      

      如果你有多个连接循环通过它们来改变每个。 以上将路由处理程序更改为 404,因为您不应该删除路由。

      路由存储在由 hapi/node_modules/call 中的路径索引的对象中

      【讨论】:

        【解决方案4】:

        我正在使用 Hapi v17.6.0:

        server.table().forEach((route) => console.log(`${route.method}\t${route.path}`));
        

        【讨论】:

          猜你喜欢
          • 2020-01-03
          • 1970-01-01
          • 2011-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-23
          相关资源
          最近更新 更多