簡體   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