【问题标题】:How to post a form data with array to an API with Joi array validation如何将带有数组的表单数据发布到带有 Joi 数组验证的 API
【发布时间】:2020-09-05 20:28:46
【问题描述】:

我创建了一个只允许 multipart/form-data 的 Hapi API,因为我需要传递一个图像流并且其中一个有效负载需要作为一个数组,所以我使用 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()
    }),
  }

在前端,我尝试通过将其字符串化来附加 FormData:

  const formData = new FormData();

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

但是,它仍然显示""tags" must be an array" 错误消息。 有没有其他方法可以将数组传递给表单数据?

【问题讨论】:

    标签: javascript arrays node.js joi hapi


    【解决方案1】:

    我遇到了完全相同的问题。我使用的是 express,但我想你会发现这个答案在 Hapi 中也很有帮助。

    您不能直接将 tags 输入传递给 Joi 验证,因为它是数组的字符串表示形式。你可以先解析一下-

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

    (这个逻辑可以封装在一个 try-catch 中以捕获任何解析问题)

    然后,将parsedTags 传递给验证函数(将密钥保留为“标签”)。

    我不知道有任何其他方法可以做到这一点,这个解决方案对我有用。

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 2017-01-20
      • 2012-04-12
      • 2021-10-14
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      相关资源
      最近更新 更多