。
実際にネットワーク要求を行わないもう1つのより効率的な方法は、Shotによって提供されるhapiの組み込みのserver.inject()
メソッドを使用することです。これにより、サーバーにリクエストが注入され、使用できるレスポンスが取得されます。ここに例があります:
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');
});
});
ここで、ルートがプラグインにあるという事実は無関係です。私はあなたの状況に近いので、単にそれを含めました。
ショットとserver.inject()
が主にテストに使用されていますが、このように正当なランタイム使用もあります。
あなたは/route2
に要求を行った場合、これは/route1
ハンドラを起動し、ペイロードを取得します:それはあなたが見てみたいものだならば、それは、ヘッダー、ステータスコードおよび潜在的なエラーを転送しないことを
$ curl localhost:4000/route2
Hello World!
注意https://github.com/hapijs/discuss/issues/297#issuecomment-255593684 – FGRibreau