2014-10-07 22 views
5

Pracujemy na serwerze HAPI node.js, który ściąga listę tras z bazy danych MongoDB i konfiguruje wymienione trasy do obsługi. Dzięki temu istnieje możliwość awarii serwera z powodu duplikowania wpisów dotyczących trasy w bazie danych.Czy istnieje sposób, aby wyświetlić wszystkie trasy na serwerze Hapi

Próbowałem szukać, ale nie udało mi się znaleźć sposobu sprawdzenia duplikatów tras w Hapi.

Czy można uzyskać listę tras obsługiwanych obecnie przez serwer Hapi?

Czy istnieje sprawdzenie błędu Czy mogę sprawić, że jest ładniejsza niż standardowy blok try/catch przy próbie zbudowania tras pochodzących z MongoDB?

Kod, który ustawia trasy, znajduje się poniżej; zobacz moje komentarze w kodzie, gdzie muszę obsłużyć błąd.

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

Może [ 'server.table()'] (http://hapijs.com/api#servertablehost) by Ci pomóc? Zwraca kopię tabeli routingu. –

+0

Dzięki @RodrigoMedeiros, wypróbuję to dziś wieczorem i dam znać, czy to działa. Jeśli tak, powinieneś opublikować to jako odpowiedź! – J2N

+0

To załatwiło sprawę! Mogę uzyskać do niego dostęp przez server.table() [i] .path, itp. Teraz. @RodrigoMedeiros – J2N

Odpowiedz

12

Może server.table() może ci pomóc? Zwraca kopię tabeli routingu. Przykład ze strony docs:

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

Używam HAPI wersji 15.1.1 i to, co działa dla mnie:

// 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

Aby zmodyfikować konkretną trasą można wyszukać je według klucza z metodą .match() wewnątrz połączeń obj.

var routeObj = server.connections[0].match('get', '/example', '<optional host>') 
routeObj.settings.handler = function(req, reply){ 
    reply({"statusCode":404,"error":"Not Found"}) 
} 

Jeśli masz wiele pętli połączeń przez nich, aby zmienić w każdym. Powyższe zmienia obsługę tras do 404, ponieważ nie powinno się usuwać tras.

Trasy są przechowywane w obiekcie indeksowane przez ścieżkę w HAPI/node_modules/Call

Powiązane problemy