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