exception filter

main
Peace 6 days ago
parent 9e5e4ae241
commit 3869e64ded
  1. 19
      nest-start/src/cats/cats.controller.ts
  2. 34
      nest-start/src/http-exception.filter.ts
  3. 2
      nest-start/src/main.ts

@ -1,12 +1,29 @@
import { Controller, Delete, Get, Patch, Post, Put } from "@nestjs/common"; import {
Controller,
Delete,
Get,
HttpException,
HttpStatus,
Patch,
Post,
Put,
UseFilters,
} from "@nestjs/common";
import { CatsService } from "./cats.service"; import { CatsService } from "./cats.service";
import { HttpExceptionFilter } from "src/http-exception.filter";
@Controller("cats") @Controller("cats")
export class CatsController { export class CatsController {
constructor(private readonly catsService: CatsService) {} constructor(private readonly catsService: CatsService) {}
@Get() @Get()
@UseFilters(HttpExceptionFilter)
getAllCat() { getAllCat() {
// throw new HttpException(
// { customized: true, success: false, message: "api is broken" },
// HttpStatus.UNAUTHORIZED,
// );
throw new HttpException("api is broken", HttpStatus.UNAUTHORIZED);
return "all cat"; return "all cat";
} }

@ -0,0 +1,34 @@
import {
ArgumentsHost,
Catch,
ExceptionFilter,
HttpException,
} from "@nestjs/common";
import { Response, Request } from "express";
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest<Request>();
const status = exception.getStatus();
const error = exception.getResponse() as
| string
| { error: string; statusCode: number; message: string | string[] };
if (typeof error === "string") {
response.status(status).json({
timestamp: new Date().toISOString(),
path: request.url,
error,
});
} else {
response.status(status).json({
timestamp: new Date().toISOString(),
path: request.url,
...error,
});
}
}
}

@ -1,9 +1,11 @@
import { NestFactory } from "@nestjs/core"; import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module"; import { AppModule } from "./app.module";
import { HttpExceptionFilter } from "./http-exception.filter";
async function bootstrap() { async function bootstrap() {
const app = await NestFactory.create(AppModule); const app = await NestFactory.create(AppModule);
app.enableCors(); app.enableCors();
app.useGlobalFilters(new HttpExceptionFilter());
await app.listen(process.env.PORT ?? 8000); await app.listen(process.env.PORT ?? 8000);
} }
bootstrap(); bootstrap();

Loading…
Cancel
Save