Hapi.js Catbox Redis, возвращающий server.cache, не является функцией

Так что я на 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 теоретически должен оставаться методом.

Я знаю, что это должно быть что-то основное, что я напортачил, но что?


person trattles    schedule 12.02.2016    source источник


Ответы (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 не выдает ошибок.

Ухожу отсюда на случай, если кто-то еще совершит подобную глупую ошибку.

person trattles    schedule 12.02.2016
comment
Привет, трэттлы, я использую catbox-redis для кэширования, и у меня возникают проблемы с этим. Он не устанавливает значение, а отображает ошибку отключения. Если вы что-нибудь об этом, пожалуйста, помогите мне stackoverflow.com/questions/41779511/ - person Sivabalan; 21.01.2017
comment
вы также можете получить сервер внутри обработчика, используя request.server - person sij; 31.05.2017