繁体   English   中英

Nest JS 使用全局管道验证来自外部 API 的数据

[英]Nest JS validate data from an external API using global pipes

我正在开发一个 Nestjs 项目。 在这里,我从另一个 rest API 获取数据。我从 API 获取数据并将其存储在我的数据库中。 但是,我需要验证我得到的 API 中的数据。 我如何使用class-validator来做到这一点?

我在 main.ts 文件中使用了全局 pipe,例如 -

app.useGlobalPipes(
   new ValidationPipe({
      transform: true,
      whitelist: true,
   }),
);

我已经正确地创建了我的 DTO。 像我创建的 DTO 示例是 -

export class DataDTO {
  @IsString()
  name: string;

  @IsInt()
  @Min(0)
  @Max(100)
  age: number;
}

我的 controller 代码如下 -

  @Get()
  async getData() {
    const data: DataDTO = await fetchDataFromExternalAPI();
  }

我得到任何数据作为data值。 这里没有异常或错误发生。 需要专家的一些帮助。

管道仅适用于您的服务器的请求。 如果您想验证从外部源检索的数据,您仍然可以像现在这样使用DTO ,但是您需要使用class-transformerplainToInstance来获取数据并创建 DTO 的实例,然后使用class-validatorvalidate来检查实例是否符合您的预期。

@Get()
async getData() {
  cosnt data: DataDto = await fetchDataFromExternalAPI();
  const dataInstance = plainToInstance(DataDto, data);
  const validated = validate(dataInstance)
  if (validated.errors.length) {
    throw mapErrorsToErrorObject(validated.errors)
  }
  return doTheRestOfLogic(dataInstance);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM