从另一个路由调用一个 hapi 路由
Call a hapi route from another route
我是 HapiJS 的新手。我正在构建一个服务,其中有两条路线 /route1 和 /route2 都使用插件架构。我已将两者都注册为我的清单文件中的插件。
我想从 /route2 调用 /route1,所以 /route2 取决于来自 /route1 的负载回复。我一直在考虑将 /route2 的逻辑放在预处理程序的 /route1 上,但我想将它们分开。
不知道如何从另一个调用已注册的插件,因为两个插件(路由)都在发出网络请求。感谢阅读。
谢谢。
当您指定不想使用共享的 handler/route 先决条件(这是我的第一选择)时,您可以使用 http 客户端(Wreck, request, http 或类似)。
另一种不涉及实际发出网络请求的更有效的方法是使用 hapi 的内置 server.inject()
method provided by Shot。这会将请求注入您的服务器并获得您可以使用的响应。这是一个例子:
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()
主要用于测试,但也有像这样的合法运行时用途。
如果您向 /route2
发出请求,这将调用 /route1
处理程序并获取负载:
$ curl localhost:4000/route2
Hello World!
我是 HapiJS 的新手。我正在构建一个服务,其中有两条路线 /route1 和 /route2 都使用插件架构。我已将两者都注册为我的清单文件中的插件。
我想从 /route2 调用 /route1,所以 /route2 取决于来自 /route1 的负载回复。我一直在考虑将 /route2 的逻辑放在预处理程序的 /route1 上,但我想将它们分开。
不知道如何从另一个调用已注册的插件,因为两个插件(路由)都在发出网络请求。感谢阅读。
谢谢。
当您指定不想使用共享的 handler/route 先决条件(这是我的第一选择)时,您可以使用 http 客户端(Wreck, request, http 或类似)。
另一种不涉及实际发出网络请求的更有效的方法是使用 hapi 的内置 server.inject()
method provided by Shot。这会将请求注入您的服务器并获得您可以使用的响应。这是一个例子:
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()
主要用于测试,但也有像这样的合法运行时用途。
如果您向 /route2
发出请求,这将调用 /route1
处理程序并获取负载:
$ curl localhost:4000/route2
Hello World!