Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 是否有办法查看Hapi服务器中的所有路由_Node.js_Mongodb_Hapijs - Fatal编程技术网

Node.js 是否有办法查看Hapi服务器中的所有路由

Node.js 是否有办法查看Hapi服务器中的所有路由,node.js,mongodb,hapijs,Node.js,Mongodb,Hapijs,我们正在开发一个node.js Hapi服务器,该服务器从MongoDB数据库中提取路由列表,并设置所述路由以提供服务。这样,由于数据库中存在重复的路由条目,服务器可能会失败 我试着寻找,但没有找到一种方法来检查Hapi中的重复路由 是否可以获取Hapi服务器当前服务的路由列表 在尝试构建来自MongoDB的路由时,是否有比标准try/catch块更漂亮的错误检查 设置路线的代码如下所示;请查看代码中我的注释,了解我需要在哪里处理错误 MySchema.find({}, function (er

我们正在开发一个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);
            }
        });
    }

});
MySchema.find({},函数(err,stubs){
如果(错误){
log(“加载时出错”);
返回;
}
对于(变量i=0;i
也许能帮到你?它返回路由表的副本。文档页面中的一个示例:

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

我正在使用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);
 });

要修改特定路由,可以在connections obj中使用.match()方法按键查找它们

var routeObj = server.connections[0].match('get', '/example', '<optional host>')
routeObj.settings.handler = function(req, reply){
  reply({"statusCode":404,"error":"Not Found"})
}
var routeObj=server.connections[0]。匹配('get','/example','')
routeObj.settings.handler=函数(请求,回复){
答复({“状态代码”:404,“错误”:“未找到”})
}
如果您有多个连接,请在每个连接中循环以进行更改。 上面将routes处理程序更改为404,因为您不应该删除routes


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

我使用的是hapi v17.6.0:

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

也许能帮你?它会返回路由表的副本。谢谢@RodrigoMedeiros,我今晚会试试这个,并让你知道它是否有效。如果有,你应该把它作为一个答案发布!成功了!我现在可以通过server.table()[I].path等访问它@罗德里戈梅德罗斯