Услуги по запросу - PullRequest
       7

Услуги по запросу

0 голосов
/ 23 ноября 2018

Из того, что я понял сейчас, nestjs создает все сервисы при запуске приложения, может, я неправильно его использую, есть ли способ настроить NestJs для создания сервисов на основе запроса?Как каждый раз, когда выполняется запрос, восстанавливаются некоторые службы, которые используются для этого запроса?

Ответы [ 3 ]

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

Я хотел использовать di, чтобы иметь возможность пометить всю конечную точку для выполнения в транзакции без необходимости писать какой-то определенный код для конечных точек.Вместо использования di есть пакет, который помогает нам создавать ресурсы на основе цепочки обратных вызовов, называемой cls-hooked, которая основана на том, что Ким Керн написал в своем ответе, async-hooks с помощью этого я смог запустить транзакцию, когда enpointвызывается и останавливается после завершения enpoint, так как я использую typeorm как db orm, я смог использовать это решение

0 голосов
/ 19 марта 2019

С выпуском nest.js 6.0 были добавлены области инъекций .При этом вы можете выбрать одну из следующих трех областей для своих провайдеров:

  • SINGLETON : поведение по умолчанию.Один экземпляр вашего провайдера используется для всего приложения
  • TRANSIENT : выделенный экземпляр вашего провайдера создается для каждого провайдера, который его внедряет.
  • ЗАПРОС: для каждого запроса создается новый поставщик.Внимание: это поведение будет всплывать в вашей цепочке зависимостей.Пример: если UsersController (Singleton) внедряет UsersService (Singleton), который внедряет OtherService (Запрос), то и UsersController, и UsersService автоматически становятся областью запроса.

Использование

Либо добавьте егодля @Injectable() декоратора:

@Injectable({ scope: Scope.REQUEST })
export class UsersService {}

Или установите его для пользовательских провайдеров в определении вашего модуля:

{
  provide: 'CACHE_MANAGER',
  useClass: CacheManager,
  scope: Scope.TRANSIENT,
}
0 голосов
/ 23 ноября 2018

Обновление 19 января

Это будет возможно в nest.js 6.0, см. запрос на получение .


Как Камил писал в этом проблема :

Как только функция асинхронных перехватов (она все еще экспериментальна в узле 10) станет стабильной, мы подумаем о предоставлении встроенного решения для экземпляров с областью запроса.

Так что пока это кажется невозможным.Вы можете пометить только целые модули как SingleScope против одноэлементного поведения по умолчанию.При SingleScope новый экземпляр модуля будет создаваться для каждого импорта.

...