У меня есть область запроса, добавляемая для ведения журнала.
fe
import { Injectable, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.REQUEST })
export class RequestLogger {
public log(message: string) {
console.log(message);
}
}
(не обращайте внимания на то, что он еще не использует конструктор с запросом; это не имеет значения )
И у меня также есть контроллер с несколькими одноэлементными инъекциями.
Я бы хотел ввести запрос, вводимый таким образом, чтобы контроллер мог быть инициирован только один раз. Внедрение его в конструктор заставит контроллер пересоздавать при каждом запросе, так что, конечно, это не так (не так ли?).
Я пытался поместить его в сигнатуру метода, но, похоже, это не так сделайте что-нибудь.
например,
@Controller('register')
export class RegisterApiController {
public constructor(
private readonly registerService: RegisterService,
) {
console.log('Controller initiated');
}
@Post()
public async postIndex(
@Inject(RequestLogger) logger: RequestLogger,
): Promise<unknown> {
console.log('request made');
logger.log('Logger message to log');
return this.registerService.register();
}
}
после приложения bootstrap (которое также включает «Контроллер инициирован»), каждый запрос завершается с ошибкой 500 и в консоли
Request made
[TypeError] Cannot read property 'log' of undefined
Есть ли способ внедрить вводимый объем запроса без принудительного воссоздания контроллера, который его использует? Что это?
Если нет другого пути, есть ли хотя бы способ переместить начальные логики контроллера c куда-нибудь еще, чтобы можно было сделать то, что нужно сделать один раз при первом запуске контроллера init есть