返回

NestJS中,让接口返回值格式统一的秘密武器

前端

用 ResponseModule、ResponseController 和 Respon 轻松实现 NestJS 统一返回格式

响应模块

响应模块是统一返回格式的根模块。它定义了希望返回的数据格式,以及对返回的数据进行处理的逻辑。创建响应模块的过程如下:

  1. 创建 ResponseModule 类:
import { Global, Module } from '@nestjs/common';
import { ResponseController } from './response.controller';

@Global()
@Module({
  controllers: [ResponseController],
  exports: [ResponseController],
})
export class ResponseModule {}
  1. 装饰器:@Global() 和 @Module():
    @Global() 装饰器将该模块标记为全局模块,这意味着它可以在整个应用程序中使用。@Module() 装饰器定义了模块的元数据,包括控制器和导出。

  2. 导出 ResponseController:
    为了在应用程序中使用 ResponseController,需要将其导出。这允许其他模块访问它。

响应控制器

响应控制器负责处理所有与统一返回格式相关的请求。它定义了方法来处理不同的请求,并返回相应的数据。创建响应控制器的过程如下:

  1. 创建 ResponseController 类:
import { Body, Controller, Get, Post } from '@nestjs/common';
import { Respon } from './respon.decorator';
import { ResponseService } from './response.service';

@Controller('response')
export class ResponseController {
  constructor(private readonly responseService: ResponseService) {}

  @Get()
  @Respon()
  getData() {
    return this.responseService.getData();
  }

  @Post()
  @Respon()
  postData(@Body() data: any) {
    return this.responseService.postData(data);
  }
}
  1. 装饰器:@Controller():
    @Controller() 装饰器定义了响应控制器的路由前缀。

  2. 装饰器:@Get() 和 @Post():
    @Get() 和 @Post() 装饰器分别定义了 GET 和 POST 请求处理程序方法。

  3. 装饰器:@Respon():
    @Respon() 装饰器将方法标记为需要进行统一返回格式处理。

  4. ResponseService:
    ResponseService 是一个服务类,它包含与统一返回格式相关的业务逻辑。

响应装饰器

响应装饰器用于将 ResponseController 中的方法标记为需要进行统一返回格式处理。它定义了希望返回的数据格式,以及对返回的数据进行处理的逻辑。创建响应装饰器的过程如下:

  1. 创建 Respon 装饰器:
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { ResponseFormat } from './response.interface';

export const Respon = createParamDecorator(
  (data: ResponseFormat, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    const response = ctx.switchToHttp().getResponse();

    return {
      request,
      response,
      data,
    };
  },
);
  1. 函数 createParamDecorator():
    createParamDecorator() 函数用于创建参数装饰器。

  2. 参数 data:
    data 参数定义了希望返回的数据格式。

  3. ExecutionContext ctx:
    ctx 参数包含请求和响应对象。

  4. 返回对象:
    装饰器返回一个对象,其中包含请求、响应和数据。

优点

使用 ResponseModule、ResponseController 和 Respon 来实现统一返回格式有很多优点:

  • 代码更简洁: 统一返回格式减少了代码重复,使代码更加简洁。
  • 易于维护: 将统一返回格式的逻辑集中在一个地方,使代码维护更容易。
  • 易于扩展: 添加新的统一返回格式非常简单。

结论

ResponseModule、ResponseController 和 Respon 提供了一种轻松实现统一返回格式的方法。通过使用统一返回格式,API 接口返回值将更加规范和易于管理。

常见问题解答

  1. 什么是统一返回格式?
    统一返回格式是一种将后端返回的数据结果进行规范化和处理的方法,以确保它们具有统一的结构和格式。

  2. 为什么需要统一返回格式?
    统一返回格式可以使 API 接口返回值更加规范、易于管理和理解。

  3. 如何使用 ResponseModule、ResponseController 和 Respon?
    在需要统一返回格式的控制器方法上添加 @Respon 装饰器即可。

  4. 统一返回格式有哪些好处?
    统一返回格式可以减少代码重复,提高代码可维护性,并简化 API 接口返回值的管理。

  5. ResponseModule、ResponseController 和 Respon 的局限性是什么?
    没有明显的局限性,但使用它们时应考虑应用程序的特定需求和要求。