2014-10-07 2 views
5

Wir arbeiten an einem node.js Hapi-Server, der eine Liste von Routen aus einer MongoDB-Datenbank einträgt und diese Routen für den Service einrichtet. Dadurch besteht die Möglichkeit, dass der Server aufgrund doppelter Routeneinträge in der Datenbank ausfällt.Gibt es eine Möglichkeit, alle Routen in einem Hapi-Server anzuzeigen

Ich habe versucht zu suchen, habe aber keine Möglichkeit gefunden, nach doppelten Routen in Hapi zu suchen.

Ist es möglich, eine Liste der Routen zu erhalten, die ein Hapi-Server gerade bedient?

Gibt es eine Fehlerüberprüfung, die ich machen kann, die hübscher ist als ein Standardversuchs-/catchblock, wenn man versucht, die Wege zu bauen, die von der MongoDB kommen?

Der Code, der die Routen einrichtet, ist unten; Bitte beachten Sie meine Kommentare im Code, wo ich mit dem Fehler umgehen muss.

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

Vielleicht [ 'server.table()'] (http://hapijs.com/api#servertablehost) würde Ihnen helfen? Es gibt eine Kopie der Routingtabelle zurück. –

+0

Danke @RodrigoMedeiros, ich werde das heute Abend versuchen und Sie wissen lassen, ob es funktioniert. Wenn dies der Fall ist, sollten Sie es als Antwort posten! – J2N

+0

Das hat den Trick! Ich kann jetzt über server.table() [i] .path usw. darauf zugreifen. @RodrigoMedeiros – J2N

Antwort

12

Vielleicht würde Ihnen helfen? Es gibt eine Kopie der Routingtabelle zurück. Ein Beispiel aus der docs Seite:

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

Ich verwende Hapi Version 15.1.1 und das ist, was für mich funktioniert:

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

Um eine bestimmte Route ändern Sie können sie durch Schlüssel nachschlagen mit der .match() Methode innerhalb eines Verbindungsobjekts.

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

Wenn Sie mehrere Verbindungen Schleife durch sie haben, um in jedem zu ändern. Das obige ändert einen Routen-Handler zu 404, da Sie Routen nicht entfernen dürfen.

Routen werden in einem Objekt indiziert durch den Pfad in hapi/node_modules gespeichert/rufen

Verwandte Themen