簡體   English   中英

如何使用 Joi 數組驗證將帶有數組的表單數據發布到 API

[英]How to post a form data with array to an API with Joi array validation

我創建了一個 Hapi API,它只允許multipart/form-data ,因為我需要傳遞圖像 stream 並且其中一個有效負載需要作為數組,所以我使用 Joi.array 來驗證它。

  payload: {
    parse: true,
    maxBytes: 20971520,
    output: "stream",
    timeout: 300000,
    multipart: true,
  },
  validate: {
    payload: Joi.object({
      thumbnail: Joi.any().optional().meta({ swaggerType: "file" }),
      tags: Joi.array()
    }),
  }

在前端,我嘗試通過將其字符串化為 append FormData:

  const formData = new FormData();

  formData.append("tags", JSON.stringify(values[val]);

但是,它仍然顯示""tags" must be an array"錯誤信息。 有沒有其他方法可以將數組傳遞給表單數據?

我有完全相同的問題。 我使用的是 express,但我想你會發現這個答案在 Hapi 中也很有幫助。

您不能直接將tags輸入傳遞給 Joi 驗證,因為它是數組的字符串表示形式。 您可以先解析它-

let parsedTags = [];
if (tags) {
  parsedTags = JSON.parse(tags);
}

(這個邏輯可以封裝在 try-catch 中以捕獲任何解析問題)

然后,將parsedTags傳遞給驗證 function(將密鑰保留為“標簽”)。

我不知道有任何其他方法可以做到這一點,這個解決方案對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM