【问题标题】:Call a hapi route from another route从另一条路线调用 hapi 路线
【发布时间】:2016-01-09 06:00:30
【问题描述】:

我对 HapiJS 还是很陌生。我正在构建一个服务,其中有两条路由 /route1 和 /route2 都使用插件架构。我已经在我的清单文件中注册了这两个插件。

我想从 /route2 调用 /route1,因此 /route2 取决于 /route1 的有效负载回复。我一直在考虑将 /route2 的逻辑放在 /route1 上的预处理程序上,但我想将它们分开保存。

不知道如何从另一个插件调用已注册的插件,因为这两个插件(路由)都在发出网络请求。感谢阅读。

谢谢。

【问题讨论】:

    标签: javascript node.js hapijs


    【解决方案1】:

    当您指定不想使用共享处理程序/路由先决条件(这是我的首选)时,您可以使用 http 客户端(Wreckrequest、@987654323 @ 之类的)。

    另一种不涉及实际发出网络请求的更有效的方法是使用 hapi 的内置 server.inject() 方法,该方法由 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!
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    相关资源
    最近更新 更多