首页 > 解决方案 > 获取 JSON 响应并将其转换为传递应用程序

问题描述

在我的 NestJS 应用程序中,我正在向我无法控制的远程 API 发出 REST 请求。REST API 有一个包含 JSON 的响应,这是一个大对象,其中大部分我都不需要。假设我们有一个如下所示的 JSON 对象:

{
"foo": [
    1,
    2,
    3
],
"bar": {
    "nested": {
        "some_key": "some_val"
    }
}

}

如果在这种情况下,在我向这个 API 发出请求后,我只想传递上面的一个子集怎么办。类似于 a 的东西NestedDto如下所示:

import { IsNotEmpty, IsString } from 'class-validator'

export class NestedDto {
  @IsNotEmpty()
  @IsString()
  someKey: string
}

对我来说,获取从 REST API 返回的数据并将其转换为 NestJS 提供的上述使用工具的最佳方式是什么?我希望能够从远程 API 获取响应,并使用我的接口规范在我的 NestJS 应用程序内部传递所述数据。

标签: nestjs

解决方案


好吧,如果你只是使用没有特殊配置的 Axios,你可以通过将响应映射到你想要的来做你已经在 Express 中使用的东西。如果你想对它有点花哨,你总是可以实现某种用类转换器装饰器装饰的类,并使用一种plainToClass与装饰器混合的方法@Transform()

顺便说一句,默认情况下,NestJS 提供了一个HttpModule,它是 Axios 的包装器,但它的响应是RxJS Observables。如果您决定使用 observable 路线,则可以使用 observable 运算符map为您进行映射(尽管您仍然必须提供映射实现,就像plainToClass我上面提到的那样),但这完全取决于您。


推荐阅读