่ทณ่‡ณไธป่ฆๅ†…ๅฎน

๐Ÿ‘ฉโ€๐Ÿ’ป Exception filter

ๅฎš็พฉโ€‹

้—œๆ–ผ Exceptionโ€‹

exception ๆŒ‡็š„ๆ˜ฏ็จ‹ๅผๅŸท่กŒ้Ž็จ‹ไธญ๏ผŒ็™ผ็”Ÿ็š„ไพ‹ๅค–็‹€ๆณ

ๅฐŽ่‡ด็จ‹ๅผๆฒ’่พฆๆณ•ๆญฃ็ขบ็š„ๅŸท่กŒ

้—œๆ–ผ filterโ€‹

filter ็š„็”Ÿๅ‘ฝ้€ฑๆœŸๆœƒๆ˜ฏ๏ผŒๅœจๅฎขๆˆถ็ซฏ API ็™ผ้€ๅพŒ๏ผŒๅ…ˆๆŠต้” controller๏ผŒๆŽฅไธ‹ไพ†ๆ‰ๆœƒๅ›žๅˆฐ filter

้—œๆ–ผ Exception filterโ€‹

ๅฐ‡ๅ‰้ข็š„ๅ่ฉžๅˆไฝต Exception + filter

้€™้‚Š็š„็”จ้€”ๆ˜ฏๅ…จๅŸŸไพ‹ๅค–ๆ””ๆˆชๅ™จ๏ผŒๆ•ดๅ€‹็ณป็ตฑ็š„ไพ‹ๅค–้ƒฝๆœƒ่ขซ้€™้‚Šๆ””ๆˆช๏ผŒไธฆไธ”้€ฒ่กŒ่™•็†

ๅฏฆไฝœ Exception filterโ€‹

ๅปบ็ซ‹็›ฎๆช”ๆกˆโ€‹

  • ๅปบ็ซ‹ all-exceptions.filter.ts
src
โ””โ”€user
โ”‚
โ””โ”€app.controller.spec.ts
โ”‚
โ””โ”€app.controller.ts
โ”‚
โ””โ”€app.module.ts
โ”‚
โ””โ”€all-exceptions.filter.ts
โ”‚
โ””โ”€app.service.ts
โ”‚
โ””โ”€main.ts

ๅปบ็ซ‹ๅ…จๅŸŸ้Žๆฟพๅ™จโ€‹

ๅœจๅ…จๅŸŸ้Žๆฟพๅ™จไธญ๏ผŒไนŸ่‡ชๅฎš็พฉไบ†ไพ‹ๅค–ๆ‹พๅ›žๅ‚ณ็š„ๆ ผๅผ

import {
ExceptionFilter,
Catch,
ArgumentsHost,
HttpException,
HttpStatus,
} from '@nestjs/common';
import { HttpAdapterHost } from '@nestjs/core';

@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
constructor(private readonly httpAdapterHost: HttpAdapterHost) { }

catch(exception: unknown, host: ArgumentsHost): void {
// In certain situations `httpAdapter` might not be available in the
// constructor method, thus we should resolve it here.
const { httpAdapter } = this.httpAdapterHost;


const ctx = host.switchToHttp();

const msg = exception instanceof Error
? exception.message
: 'unknown message';

const httpStatus =
exception instanceof HttpException
? exception.getStatus()
: HttpStatus.INTERNAL_SERVER_ERROR;

const responseBody = {
statusCode: httpStatus,
msg: msg,
timestamp: new Date().toISOString(),
path: httpAdapter.getRequestUrl(ctx.getRequest()),
};

httpAdapter.reply(ctx.getResponse(), responseBody, httpStatus);
}
}

่จปๅ†Šๅ…จๅŸŸ็š„้Žๆฟพๅ™จโ€‹

  • ๆ–ผ app.module.ts ่จปๅ†Š
@Module({
imports: [
InhabitantModule,
],
controllers: [AppController],
providers: [AppService,
{
provide: APP_FILTER,
useClass: AllExceptionsFilter,
}
],
})
export class AppModule { }