【问题标题】:Axios post with react + jestAxios 用 react + jest 发帖
【发布时间】:2020-05-01 18:15:31
【问题描述】:

当开发+生产时,服务器端(PHP)低于数组

array(2) {
  ["username"]=>
  string(8) "abc12345"
  ["password"]=>
  string(6) "1111"
}

但是如果我用玩笑来测试

 ["----------------------------366071262138387187326757
    Content-Disposition:_form-data;_name"]=>
      string(193) ""username"

    abc12345
    ----------------------------366071262138387187326757
    Content-Disposition: form-data; name="password"

    1111
    ----------------------------366071262138387187326757--
    "
    }

所以我无法使用 $_POST["username"] 获得价值

下面是axios设置

const FormData = require("form-data")

let bodyFormData = new FormData();

bodyFormData.append('username', values.login);
bodyFormData.append('password', values.password);

return await axios({
    method: 'post',
    url: url,
    data: bodyFormData,
    config: { 
      headers: { 
        'Content-Type': 'multipart/form-data'
      } 
    }
})

如何发送与 dev + prod 格式相同的数据?

【问题讨论】:

    标签: reactjs unit-testing jestjs axios


    【解决方案1】:

    不要将FormData 用于简单的 POST 表单。它需要使用相当复杂的multipart/form-data Content-Type,通常用于上传文件而不是典型的表单数据。

    我猜你的服务器会收到application/x-www-form-urlencoded,所以试试吧:

    const qs = require('querystring');
    ...
    const data = qs.stringify({
      username: values.login,
      password: values.password
    });
    return await axios.post(url, data, {
      headers: { 
        'Content-Type': 'application/x-www-form-urlencoded'
      } 
    })
    

    【讨论】:

    • 我的项目已经有这么多带有formdata的axios了。无论如何使用formdata?
    • @Lee 这里不是关于 Axios,而是关于您的服务器如何处理数据。您需要更改您的服务器以期望并解析 multipart/form-data 请求,正如我的回答所说,这比使用 application/x-www-form-urlencoded 甚至 application/json 之类的东西要复杂得多。
    猜你喜欢
    • 2021-12-03
    • 2018-08-20
    • 2021-09-16
    • 2021-06-24
    • 2020-11-24
    • 2022-07-21
    • 2020-08-04
    • 2021-06-04
    • 2021-08-25
    相关资源
    最近更新 更多