Мой перехватчик исключений NestJS, похоже, ничего не делает

#typescript #nestjs

Вопрос:

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

main.ts

 import { Logger, ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { TransformInterceptor } from './transform.interceptor';
import { createData } from '../seeds/index';
import morganMiddleware from './middleware/morgan-middleware';
import { ErrorsInterceptor } from './middleware/error-handling/error-interceptor';

declare const module: any;

async function bootstrap() {
  const logger = new Logger();
  const app = await NestFactory.create(AppModule, {
    cors: true,
    logger: true,
  });
  app.useGlobalPipes(new ValidationPipe());
  app.useGlobalInterceptors(
    new TransformInterceptor(),
    new ErrorsInterceptor(),
  );
  app.use(morganMiddleware);

  const port = 3000;
  await app.listen(port);
  logger.log(`Application listening on Port ${port}`);


}
bootstrap();
 

перехватчик ошибок.ts

     import {
  Injectable,
  NestInterceptor,
  ExecutionContext,
  CallHandler,
  HttpException,
} from '@nestjs/common';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { mapToHttpError } from './error-maps';

@Injectable()
export class ErrorsInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return next.handle().pipe(
      catchError((err) => {
        if (err instanceof HttpException) return throwError(err);
        const error = mapToHttpError(err);

        return throwError(new error());
      }),
    );
  }
}
 

карты ошибок.ts

 import { UnauthorizedException } from '@nestjs/common';
import { TokenExpiredError } from 'jsonwebtoken';

export const mapToHttpError = (error) => {
  if (error instanceof TokenExpiredError) {
    return UnauthorizedException;
  }
  return error;
};
 

Любая помощь была бы очень признательна. Спасибо

ИЗМЕНИТЬ: Я могу подтвердить, что перехватчик работает на уровне контроллера

Комментарии:

1. Можете ли вы показать код TransformInterceptor, так как он выполняется до ErrorsInterceptor?

2. вы зарегистрировали его в модуле приложения

3. @Yilmaz В этом и была проблема. Большое спасибо, я не знаю, как я это пропустил.