从另一条路线呼叫hapi路线

我对HapiJS很新颖。 我正在build立一个服务,我有两个路由/ route1和/ route2都使用插件体系结构。 我已经注册为我的清单文件上的插件。

我想从/ route2调用/ route1,因此/ route2取决于来自/ route1的有效负载。 我一直在寻找把/ route2的逻辑放在预处理程序的/ route1上,但我想分开保存它们。

不知道如何调用从另一个注册插件的事情是这两个插件(路线)正在做networking请求。 谢谢阅读。

谢谢。

当你指定你不想使用一个共享的处理程序/路由先决条件(这将是我的第一select),你可以使用一个HTTP客户端( 残骸 , 请求 , http或类似的)实际的请求。

另一种不涉及实际发出networking请求的更有效的方法是使用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'); }); }); 

请注意,路由插件在这里的事实是无关紧要的。 我只是把它包括在内,所以它接近你的情况。

Shot和server.inject()主要用于testing,但也有合法的运行时使用。

如果您向/route2发出请求,则会调用/route1处理程序并获取有效负载:

 $ curl localhost:4000/route2 Hello World!