Как формировать ответ с Ошибками — Nest JS?

Для формирования ответа с ошибками в 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.