有没有办法查看Hapi服务器中的所有路由

时间:2014-10-07 19:14:46

标签: node.js mongodb hapijs

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

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

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

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

设置路线的代码如下;请在我需要处理错误的代码中查看我的注释。

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

});

4 个答案:

答案 0 :(得分:16)

也许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] }
    }] */

答案 1 :(得分: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);
 });

答案 2 :(得分:1)

要修改特定路线,您可以使用连接对象内的.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

中由path索引的对象中

答案 3 :(得分:1)

我正在使用Hapi v17.6.0:

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