2014-10-07 10 views
5

Stiamo lavorando su un server Hapi node.js che estrae un elenco di percorsi da un database MongoDB e imposta tali percorsi per la manutenzione. Con questo, c'è il rischio che il server fallisca a causa di voci di route duplicate nel database.C'è un modo per visualizzare tutte le rotte in un server Hapi

Ho provato a cercare, ma non sono riuscito a trovare un modo per verificare percorsi duplicati in Hapi.

È possibile ottenere un elenco di percorsi attualmente serviti da un server Hapi?

C'è un controllo degli errori che posso rendere più carino di un blocco try/catch standard quando si tenta di costruire i percorsi provenienti da MongoDB?

Il codice che imposta i percorsi è inferiore; si prega di vedere i miei commenti nel codice per dove ho bisogno di gestire l'errore.

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

Forse [ 'server.table()'] (http://hapijs.com/api#servertablehost) vi aiutano? Restituisce una copia della tabella di routing. –

+0

Grazie a @RodrigoMedeiros, ci proverò stasera e ti faccio sapere se funziona. Se lo fa, dovresti postarlo come risposta! – J2N

+0

Questo ha fatto il trucco! Posso accedervi tramite server.table() [i] .path, ecc. Ora. @RodrigoMedeiros – J2N

risposta

12

Forse server.table() ti aiuterebbe? Restituisce una copia della tabella di routing. Un esempio dalla pagina Documenti:

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

sto usando Hapi versione 15.1.1 e questo è ciò che funziona per me:

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

Per modificare un percorso specifico è possibile guardare in alto a chiave con il metodo .match() all'interno di una connessione obj.

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

Se si dispone di più connessioni passano attraverso di esse per modificarle. Quanto sopra cambia un gestore di rotte a 404 poiché non si suppone che si rimuovano percorsi.

percorsi sono memorizzati in un oggetto indicizzato in base al percorso in Hapi/node_modules/chiamano

Problemi correlati