在我的Hapi应用程序中访问路由中的控制器时出现问题

时间:2016-07-18 15:28:19

标签: hapijs

Hapi的新手,写我的第一个应用程序。 我的路由和控制器在每个模块内的单独文件中。到目前为止,我一直在路线文件中要求控制器,如:

const controller = require('./controller');

然后编写路线,如:

module.exports = [{
    path: '/items/{id}',
    method: 'GET',
    handler: controller.getItemById
}];

到目前为止一切顺利。

现在,我想在控制器方法中开始使用缓存。这迫使我将我的控制器转换为插件。

所以我的控制器现在看起来像:

exports.register = (server, options, next) => {

    const itemCache = (id, itemId) => {
        // do caching stuff
    }

    const getItemById = (request, reply) => {
    // do stuff, use itemCache
    }

    server.expose({
        getItemById: getItemById
    });

    next();
};

问题是,现在我如何访问路线文件中的控制器? server.dependency()不可用于routes文件。

1 个答案:

答案 0 :(得分:0)

我也是Hapi的新手,虽然我会说在Hapi处理这个问题的最佳和最标准的方法是

A)使路由也是自己的插件,以便服务器通过

B)使路由索引文件的唯一导出成为接受服务器作为参数的函数。并返回服务器的路由。在主索引文件中创建服务器后调用它。

另外请记住,如果您只需要控制器中的服务器对象来处理将成为路由处理程序的函数,则可以从传入这些函数的请求参数中获取服务器对象。 (ps这是来自gitter board的Lana:P)