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 { HttpExceptionFilter } from "src/http-exception.filter";
@Controller("cats")
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Get()
@UseFilters(HttpExceptionFilter)
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";
}

@ -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 { AppModule } from "./app.module";
import { HttpExceptionFilter } from "./http-exception.filter";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors();
app.useGlobalFilters(new HttpExceptionFilter());
await app.listen(process.env.PORT ?? 8000);
}
bootstrap();

Loading…
Cancel
Save