Проверяет понимание порядка выполнения middleware-компонентов Nest.js, что критично для корректной обработки запросов и ошибок.
Nest.js строит обработку запроса как конвейер, где каждый слой выполняет свою роль. Понимание порядка важно, потому что от него зависит, где проверять права, где логировать, а где обрабатывать ошибки.
Если guard вернул false, запрос дальше не идёт, и срабатывает filter. Interceptor может обернуть вызов в Observable и изменить результат.
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(ctx: ExecutionContext, next: CallHandler) {
console.log('before');
return next.handle().pipe(tap(() => console.log('after')));
}
}
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(ctx: ExecutionContext) {
return checkToken(ctx.switchToHttp().getRequest());
}
}
@UseGuards(AuthGuard)
@UseInterceptors(LoggingInterceptor)
@Get()
findAll() { return this.service.findAll(); }Filters применяются глобально или локально через @UseFilters и позволяют вернуть единый формат ошибки.
Итог: используйте guards для доступа, interceptors для логирования и трансформации, filters для централизованной обработки ошибок — так код остаётся чистым и предсказуемым.