В любом веб-приложении обработка исключений HTTP имеет решающее значение для обеспечения бесперебойной работы пользователя и предоставления содержательных сообщений об ошибках. NestJS, популярная платформа для создания масштабируемых приложений Node.js, предлагает надежные механизмы для эффективной обработки исключений HTTP. В этой статье мы рассмотрим различные методы NestJS для обработки исключений HTTP, а также приведем примеры кода.
- Встроенные фильтры исключений.
NestJS предоставляет встроенные фильтры исключений, которые могут обрабатывать исключения на глобальном уровне или на уровне контроллера. Эти фильтры выполняются автоматически при возникновении исключения, что позволяет вам настроить реакцию на ошибку.
import { Catch, ArgumentsHost, HttpException, HttpStatus } from '@nestjs/common';
import { BaseExceptionFilter } from '@nestjs/core';
@Catch(HttpException)
export class HttpExceptionFilter extends BaseExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const status = exception.getStatus();
response
.status(status)
.json({
statusCode: status,
message: exception.message,
});
}
}
- Пользовательские фильтры исключений.
Вы можете создавать собственные фильтры исключений для обработки определенных исключений или реализации собственных ответов на ошибки. Это обеспечивает детальный контроль над обработкой ошибок.
import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
@Catch(NotFoundException)
export class NotFoundExceptionFilter implements ExceptionFilter {
catch(exception: NotFoundException, host: ArgumentsHost) {
const response = host.switchToHttp().getResponse();
response.status(HttpStatus.NOT_FOUND).json({
statusCode: HttpStatus.NOT_FOUND,
message: 'Resource not found',
});
}
}
- Глобальные фильтры исключений.
Глобальные фильтры исключений обрабатывают исключения во всем приложении. Их можно зарегистрировать в основном модуле приложения.
import { Module } from '@nestjs/common';
import { APP_FILTER } from '@nestjs/core';
import { HttpExceptionFilter } from './http-exception.filter';
@Module({
providers: [
{
provide: APP_FILTER,
useClass: HttpExceptionFilter,
},
],
})
export class AppModule {}
- Перехватчики исключений.
NestJS также предоставляет перехватчики исключений, которые позволяют вам изменять ответ или выполнять дополнительные действия перед отправкой ответа об ошибке.
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
@Injectable()
export class ErrorInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle().pipe(
catchError((error) => {
// Perform additional actions or modify the response
return throwError(error);
}),
);
}
}
- Пользовательские классы исключений.
NestJS позволяет определять собственные классы исключений для обработки ошибок, специфичных для приложения. Эти классы могут инкапсулировать дополнительную информацию об исключении.
import { HttpException, HttpStatus } from '@nestjs/common';
export class CustomException extends HttpException {
constructor() {
super('Custom error message', HttpStatus.BAD_REQUEST);
}
}
Эффективная обработка исключений HTTP имеет важное значение для создания надежных и удобных для пользователя веб-приложений. В этой статье мы рассмотрели различные методы, предоставляемые NestJS для обработки исключений HTTP, включая встроенные фильтры исключений, настраиваемые фильтры исключений, глобальные фильтры исключений, перехватчики исключений и настраиваемые классы исключений. Используя эти методы, вы можете обеспечить правильную обработку ошибок и предоставить содержательные ответы пользователям вашего приложения.