Для формирования ответа с ошибками в Nest JS, вы можете использовать механизм исключений, предоставляемый Nest JS и TypeScript.
1. Создайте кастомную исключительную ситуацию, расширяя встроенный класс HttpException
:
import { HttpException, HttpStatus } from '@nestjs/common'; export class CustomException extends HttpException { constructor(message: string) { super(message, HttpStatus.BAD_REQUEST); } }
2. В нужном месте вашего кода выбрасывайте это исключение, передавая текст ошибки:
throw new CustomException('Custom error message');
3. Для обработки исключений создайте глобальный фильтр, который будет перехватывать исключения и формировать ответ с ошибкой:
import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common'; import { Response } from 'express'; @Catch(HttpException) export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse<Response>(); const status = exception.getStatus(); response .status(status) .json({ statusCode: status, message: exception.message, }); } }
4. Зарегистрируйте этот фильтр в вашем приложении, добавив его в провайдеры глобальных фильтров:
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { HttpExceptionFilter } from './http-exception.filter'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(3000); } bootstrap();
Теперь, когда будет выброшено исключение CustomException
, клиент получит ответ с ошибкой в формате JSON:
{ "statusCode": 400, "message": "Custom error message" }
Таким образом, с помощью механизма исключений и глобальных фильтров в Nest JS, вы можете удобно формировать ответы с ошибками для вашего API.