2014-10-07 33 views
5

我們正在研究一個node.js Hapi服務器,該服務器從MongoDB數據庫中提取路由列表並設置所需的服務路由。由此,服務器有可能因數據庫中的重複路由條目而失敗。有沒有辦法查看Hapi服務器中的所有路由

我試過看,但沒有找到一種方法來檢查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); 
      } 
     }); 
    } 

}); 
+2

也許['server.table()'](http://hapijs.com/api#servertablehost)將幫助你?它返回路由表的一個副本。 – 2014-10-07 19:36:50

+0

謝謝@RodrigoMedeiros,今晚我會試試,並告訴你它是否有效。如果是這樣,你應該把它作爲答案! – J2N 2014-10-08 01:58:15

+0

這個伎倆!我現在可以通過server.table()[i] .path等來訪問它。 @RodrigoMedeiros – J2N 2014-10-08 15:09:17

回答

12

也許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

我使用哈皮版本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); 
}); 
1

要修改特定的路線,你可以通過按鍵找一找與連接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。

路線都存儲在由高致病性禽流感/ node_modules路徑索引的對象/調用

相關問題