【问题标题】:Hapi.js Catbox Redis returning "server.cache is not a function"Hapi.js Catbox Redis 返回“server.cache 不是函数”
【发布时间】:2016-02-13 02:03:41
【问题描述】:

所以我有 99% 的把握我只是在这里搞砸了一些愚蠢的事情。

我正在尝试设置 catbox 以将对象缓存到 redis。我已经启动并运行了 redis,我可以使用 RDM(类似 sql pro 的 redis 实用程序)来实现它,但 Hapi 不合作。

我像这样注册redis catbox缓存:

const server = new Hapi.Server({
cache: [
{
  name: 'redisCache',
  engine: require('catbox-redis'),
  host: 'redis',
  partition: 'cache',
  password: 'devpassword'
}
]
});

我在 server.js 中这样做 在这段代码之后,我继续注册更多插件并启动服务器。我也在文件末尾导出服务器

module.exports = server;

然后在我的路由文件中,我尝试像这样设置测试路由:

{
    method: 'GET',
    path: '/cacheSet/{key}/{value}',
    config: { auth: false },
    handler: function(req, res) {
        const testCache = server.cache({
            cache: 'redisCache',
            expireIn: 1000
        });

        testCache.set(req.params.key, req.params.value, 1000, function(e) {
            console.log(e);
            res(Boom.create(e.http_code, e.message));
         })
        res(req.params.key + " " + req.params.value);
    }
},

注意:我的路由在一个外部文件中,并导入到我注册它们的 server.js 中。

如果我注释掉这条路线上的所有缓存内容,路线运行良好并返回我的参数。

如果我用缓存的东西运行它,起初我得到“服务器未定义”。所以我然后添加了

const server                        = require('./../server.js');

导入服务器。

现在当我运行它时,我得到“server.cache 不是函数”和 500 错误。

我不明白我做错了什么。我的猜测是我正在导入服务器,但也许它是没有设置所有配置的对象,因此它无法使用 .cache 方法。但是这似乎是错误的,因为 .cache 应该始终是具有默认内存缓存的默认方法,因此即使我的缓存注册尚未激活,server.cache 理论上仍然应该是一种方法。

我知道我搞砸了一些基本的东西,但是什么?

【问题讨论】:

    标签: node.js caching redis hapijs


    【解决方案1】:

    我是对的。我在做一些愚蠢的事情。这与我如何导出服务器有关。我修改了我的结构以提取初始服务器创建并使其更加模块化。现在我只是像这样导出服务器:

    'use strict';
    const Hapi       = require('hapi');
    const server = new Hapi.Server({
      cache: [
        {
          name: 'redisCache',
          engine: require('catbox-redis'),
          host: 'redis',
          partition: 'cache',
          password: 'devpassword'
        }
      ]
    });
    module.exports = server;
    

    然后我将它导入我的主服务器文件(现在是 index.js,之前是 server.js),一切运行正常。我也可以将它导入任何其他文件(在本例中是我的路由文件)并访问服务器以获取适当的方法。

    Redis 乐于存储密钥,而 Hapi 乐于不给我错误。

    离开这里以防其他人遇到这种愚蠢的错误。

    【讨论】:

    • 你好,我正在使用 catbox-redis 进行缓存,但我遇到了问题。它不设置值,而是显示断开连接的错误。如果您对此有任何疑问,请帮助我stackoverflow.com/questions/41779511/…
    • 你也可以通过 request.server 获取服务器内部的处理程序
    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2019-03-31
    • 1970-01-01
    • 2018-07-31
    • 2017-03-10
    • 2018-03-08
    相关资源
    最近更新 更多