NestJs - Отправить ответ от фильтра исключений - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь добиться простого поведения: всякий раз, когда выдается исключение, я хотел бы отправить ошибку в качестве ответа.Мой наивный код выглядит следующим образом, но не отвечает вообще:

Фильтр исключений:

import { ExceptionFilter, ArgumentsHost, Catch } from '@nestjs/common';

@Catch()
export class AnyExceptionFilter implements ExceptionFilter {
  catch(exception: any, host: ArgumentsHost) {
    return JSON.stringify(
      {
        error: exception,
      },
      null,
      4,
    );
  }
}

Модуль

@Module({
  imports: [],
  controllers: [AppController, TestController],
  providers: [AppService, AnyExceptionFilter],
})
export class AppModule {}

main.ts

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalFilters(new AnyExceptionFilter());
  await app.listen(1212);
}
bootstrap();

Что я пропускаю?Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 19 июня 2018
import { ExceptionFilter, Catch, HttpException, ArgumentsHost, HttpStatus } from '@nestjs/common';

@Catch()
export class AnyExceptionFilter implements ExceptionFilter {
  catch(error: Error, host: ArgumentsHost) {

    const response = host.switchToHttp().getResponse();

    const status = (error instanceof HttpException) ? error.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR;

    response
      .status(status)
      .json(error);
  }
}

Мне кажется, этот код работает нормально.

Версия Nest: 5.0.1

0 голосов
/ 13 июня 2018

catch должен использовать объект response для отправки чего-либо клиенту:

const ctx = host.switchToHttp();
const response = ctx.getResponse();

response
  .status(status)
  .send('Hello');
...