Обработка приложения Nest.js при отключении кеша Redis - PullRequest
0 голосов
/ 06 ноября 2018

Когда я устанавливаю Redis как кеш-хранилище, например:

import { Module, CacheModule } from '@nestjs/common';
import * as redisStore from 'cache-manager-redis-store';

@Module({
    imports: [
        CacheModule.register({
            store: redisStore,
            host: 'localhost',
            port: 6379,
        }),
    ],
    controllers: [],
    providers: [],
})
export class AppModule {}

Работает как положено. Однако, если по какой-либо причине соединение с Redis обрывается, произойдет сбой всего приложения:

Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 
127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1113:14)

Как я могу изящно обработать эти ошибки или даже попытаться восстановить соединение?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы можете использовать класс redisCache следующим образом

redisCache.set('foo', 'bar', { ttl: ttl }, (err) => {
  if (err) {
    throw err;
  }

  redisCache.get('foo', (err, result) => {
    console.log(result);
    // >> 'bar'
    redisCache.del('foo', (err) => {
    });
  });
});
0 голосов
/ 07 ноября 2018

Хорошо, нашел сам. Мне нужно вставить выставленный CACHE_MANAGER в конструктор модуля, чтобы получить в свои руки клиента:

import { CACHE_MANAGER, Inject } from '@nestjs/common';

...

export class AppModule {
    constructor(@Inject(CACHE_MANAGER) cacheManager) {
        const client = cacheManager.store.getClient();

        client.on('error', (error) =>  {
            console.info(error);
        });
    }
}
...