๐ฉโ๐ป 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 { }