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