Estou tentando registrar o objeto de solicitação (para fins de depuração). Meu aplicativo NestJS usa express (a opção padrão).
Obtenho o objeto request tanto no meu controlador quanto no provedor de serviços (após a injeção neste último caso). A parte relevante no controlador é:
// this is the Logger from @nestjs/common
private readonly logger = new Logger(MessagesController.name);
@Get()
findAll(@Req() request: Request): string
{
this.logger.log(request);
return this.messagesService.findAll();
}
Parte relevante no provedor de serviços é:
// the service is request-scoped since it's injected with a request-scoped provider
@Injectable({scope: Scope.REQUEST})
export class MessagesService {
constructor(@Inject(REQUEST) private request: Request) {
this.request = request;
}
findAll(): string {
this.logger.log(this.request);
return "all messages";
}
}
Em ambos os casos em que ocorre o registro (ou seja, tanto no controlador quanto no serviço), o objeto é registrado no console simplesmente como [object Object]
o que não ajuda em nada. Se as chamadas para this.logger.log(request)
forem substituídas por mundanas, console.log(request)
o objeto será bem impresso no console.
Como posso obter o Logger
from @nestjs/common
para imprimir bem esses objetos de solicitação?
Você pode substituir ou estender o criador de logs padrão, mas honestamente, a abordagem mais fácil seria apenas converter a solicitação em string antes de registrá-la:
EDIT: Para superar objetos circulares, você pode usar
util.inspect
: