मैंने नेस्टज में नीचे के रूप में HttpExceptionFilter बनाया है।

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

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception, host: ArgumentsHost) {
    const context = host.switchToHttp();
    const response = context.getResponse<Response>();
    const status = (exception.getStatus && exception.getStatus()) || 500;

    response.status(status).json({
      code: status,
      success: false,
    });
  }
}

और मैंने इसे विश्व स्तर पर उपयोग करने के लिए app.module में डाल दिया।

@Module({
  imports: [
  ],
  controllers: [AppController],
  providers: [
    AppService,
    {
      provide: APP_FILTER,
      useClass: HttpExceptionFilter,
    },
  ],
})

अब तक, यह नेस्टज के पाइप को छोड़कर बहुत अच्छी तरह से काम करता है। मैंने एक पाइप बनाया और इसे अन्य नियंत्रक में @UsePipes के साथ बनाया।

यह मेरा पाइप कोड है।

import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';

@Injectable()
export class SplitEmailPipe implements PipeTransform<string, string> {
  transform(value: any, metadata: ArgumentMetadata): any {
    let email = '';
    try {
      email = value.split('@')[1];
    } catch (err) {
      throw new Error(err);
    }
    return { email };
  }
}

और मैंने उस पाइप को @UsePipes का उपयोग करके लगाया।
इस मामले में पाइप अच्छा काम करता है।

  @Post('/')
  @UsePipes(new SplitEmailPipe())
  public async signIn(
    @Res() res,
    @Body() signInDto: SignInDto,
  ) {
    ... do something
  }

लेकिन समस्या यह है कि HttpExceptionFilter काम नहीं करता है। यह Nestjs की डिफ़ॉल्ट प्रतिक्रिया द्वारा प्रतिक्रिया करता है।
क्या आप मुझे इस समस्या के लिए कुछ सलाह दे सकते हैं?

0
DD DD 3 जिंदा 2021, 11:51

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा इसलिए होता है क्योंकि आप HttpException प्रकार से कोई त्रुटि नहीं फेंक रहे हैं, इस समस्या को ठीक करने के लिए आपको प्रतिस्थापित करना चाहिए:

  import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';

@Injectable()
export class SplitEmailPipe implements PipeTransform<string, string> {
  transform(value: any, metadata: ArgumentMetadata): any {
    let email = '';
    try {
      email = value.split('@')[1];
    } catch (err) {
      throw new BadRequestException(err);
    }
    return { email };
  }
}
1
Youba 3 जिंदा 2021, 14:26