Come si specifica che non si desidera utilizzare un gestore condiviso/percorso prerequisito (che sarebbe la mia prima scelta), si potrebbe fare una richiesta effettiva utilizzando un client http (Wreck, request, http o simili) .
Un altro modo più efficiente che non implica effettivamente l'esecuzione di una richiesta di rete consiste nell'utilizzare il metodo incorporato server.inject()
di hapi fornito da Shot. Questo inietterà una richiesta al tuo server e riceverà la risposta, che puoi usare. Ecco un esempio:
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 4000 });
var plugin1 = function (server, options, next) {
server.route({
method: 'GET',
path: '/route1',
handler: function (request, reply) {
reply('Hello');
}
});
next();
};
plugin1.attributes = { name: 'plugin1' };
var plugin2 = function (server, options, next) {
server.route({
method: 'GET',
path: '/route2',
handler: function (request, reply) {
server.inject('/route1', function (res) {
reply(res.payload + ' World!');
});
}
});
next();
};
plugin2.attributes = { name: 'plugin2' };
server.register([plugin1, plugin2], function (err) {
if (err) throw err;
server.start(function (err) {
if (err) throw err;
console.log('Started');
});
});
Si noti che il fatto che i percorsi siano nei plugin qui è irrilevante. L'ho semplicemente incluso quindi è vicino alla tua situazione.
Shot e server.inject()
vengono principalmente utilizzati per il test ma esistono anche usi di runtime legittimi come questo.
Se si effettua una richiesta per /route2
, questo richiamerà /route1
gestore e ottenere il carico utile:
$ curl localhost:4000/route2
Hello World!
fonte
2015-10-11 22:13:27
Nota che non le intestazioni a termine, lo status-code e potenziali errori se è questo che si vuole dare un'occhiata all'indirizzo https://github.com/hapijs/discuss/issues/297#issuecomment-255593684 – FGRibreau