从自定义异常过滤器返回JSON结果,可以通过以下步骤实现:
首先,需要创建一个自定义异常过滤器类,该类需要继承自NestJS的ExceptionFilter
基类。在这个类中,可以实现catch
方法来处理异常。
import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
import { Request, Response } 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();
response
.status(status)
.json({
statusCode: status,
timestamp: new Date().toISOString(),
path: request.url,
});
}
}
在创建了自定义异常过滤器类之后,需要将其应用到需要处理异常的路由或控制器上。可以使用@UseFilters
装饰器来实现。
import { Controller, UseFilters } from '@nestjs/common';
import { HttpExceptionFilter } from './http-exception.filter';
@Controller()
@UseFilters(new HttpExceptionFilter())
export class AppController {
// ...
}
在需要抛出异常的地方,可以使用NestJS的throw
方法来抛出自定义异常。
import { HttpException, HttpStatus } from '@nestjs/common';
export class AppService {
getHello(): string {
throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);
}
}
当自定义异常被抛出时,自定义异常过滤器会捕获该异常并返回JSON格式的结果。在上面的示例中,返回的JSON结果如下所示:
{
"statusCode": 403,
"timestamp": "2022-01-01T00:00:00.000Z",
"path": "/hello"
}
通过以上步骤,可以实现从自定义异常过滤器返回JSON结果的功能。
领取专属 10元无门槛券
手把手带您无忧上云