Можно ли изменить ttl CacheModule после запуска приложения в nestjs?

Я зарегистрировал CacheModule с определенными ttl CacheModule.register({ ttl: 5 * 60 * 60 })

Я хочу иметь возможность динамически настраивать ttl после запуска приложения.

Является ли это возможным?


person sreginogemoh    schedule 29.01.2019    source источник


Ответы (1)


Возможно, есть CacheManager, экспортированный из @nestjs/common, где он используется внутри CacheInterceptor, небольшое исследование показывает, что просто передать аргументы в cache-manager, где ttl может быть функцией, но она оценивается перед передачей в store (memory является один из cache-manager рассказа), то внутри него есть строчка:

var maxAge = (options.ttl || options.ttl === 0) ? options.ttl * 1000 : lruOpts.maxAge;

по этой строке вы можете предположить, что вы, вероятно, могли бы сделать что-то вроде:

const options = {
  ttl: () =>({ valueOf: () => someVariable })
}

Потому что:

let c = { valueOf: () => 2 }
console.log(100*c);

Это только мои мысли, не пробовал.

С Уважением.

person cojack    schedule 29.01.2019
comment
куда бы вы вставили этот код, чтобы попробовать его? - person sreginogemoh; 29.01.2019
comment
Вы имеете в виду эти варианты? Здесь: const someVar = 23; CacheModule.register({ ttl: () => ({ someVar })}) - person cojack; 29.01.2019
comment
Скажем, я хочу настроить ttl для каждого запроса в моих службах. Похоже, мне нужно использовать какую-то глобальную переменную? Как вы думаете, CacheModule.register всегда принимает текущую переменную? У меня такое ощущение, что он инициализируется только один раз, поэтому ему все равно, что переменная была изменена с тех пор. Какие-нибудь мысли? - person sreginogemoh; 30.01.2019
comment
@sreginogemoh CacheModule.register в конце здесь не играет, это всего лишь прокси-сервер для передачи аргументов в cache-manager, поэтому зависит от того, что вы передадите, это будет оцениваться. Пример someVariable — это только концепция, это может быть что угодно, например: import SomeObject from 'some/path'; const options = {ttl: () =›({ valueOf: () =› SomeObject }) }, где SomeObject реализует функцию valueOf . - person cojack; 30.01.2019
comment
Но он будет жить вне контекста nest, или вы можете получить контекст гнезда, а затем попытаться внедрить его туда. Существует множество решений, зависит от того, что подходит для вас. - person cojack; 30.01.2019
comment
Вы говорите, что если я передам переменную, которая будет динамически изменяться позже, менеджер кеша всегда будет использовать эту переменную, какое бы значение она ни содержала в определенный момент времени? Пожалуйста, поправьте меня, если я ошибаюсь. - person sreginogemoh; 30.01.2019