Впервые в Nest.js,
Я пытаюсь реализовать простой регистратор для отслеживания HTTP-запросов, например:
:method :url :status :res[content-length] - :response-time ms
Насколько я понимаю, лучшим местом для этого будут перехватчики .Но я также использую Охранники и, как уже упоминалось, Охранники срабатывают после промежуточного программного обеспечения, но до перехватчиков.
То есть мои запрещенные доступы не регистрируются,Я мог бы написать часть регистрации в двух разных местах, но лучше нет.Есть идеи?
Спасибо!
Мой код перехватчика:
import { Injectable, NestInterceptor, ExecutionContext, HttpException, HttpStatus } from '@nestjs/common';
import { Observable, throwError } from 'rxjs';
import { catchError, tap } from 'rxjs/operators';
@Injectable()
export class HTTPLoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, call$: Observable<any>): Observable<any> {
const now = Date.now();
const request = context.switchToHttp().getRequest();
const method = request.method;
const url = request.originalUrl;
return call$.pipe(
tap(() => {
const response = context.switchToHttp().getResponse();
const delay = Date.now() - now;
console.log(`${response.statusCode} | [${method}] ${url} - ${delay}ms`);
}),
catchError((error) => {
const response = context.switchToHttp().getResponse();
const delay = Date.now() - now;
console.error(`${response.statusCode} | [${method}] ${url} - ${delay}ms`);
return throwError(error);
}),
);
}
}