如何使用axios调用GET api发送BODY中的数据?

wz1wpwve  于 2022-11-05  发布在  iOS
关注(0)|答案(2)|浏览(387)

我尝试使用GET方法发送正文中的数据。当我尝试使用POSTMAN/cURL/Python运行时,它运行得很好,但使用AXIOS(ReactJS)就不行了。
网址:

  1. curl -X GET \
  2. http://127.0.0.1:8000/xyz/xyz/ayx-api/ \
  3. -H 'Authorization: Token 980e4e673a9cfb4c99cb35313f65a446aa44faf7' \
  4. -H 'Content-Type: application/json' \
  5. -H 'Postman-Token: 1ee27393-b4b0-446a-b613-bd319e02e3c8' \
  6. -H 'cache-control: no-cache' \
  7. -d '{"dataId": 1, "date": "2018-03-01", "days": 9 }'

这个卷发器很好用
使用Axios:

  1. import axios from 'axios';
  2. const baseUrl = process.env.BACKEND_SERVER_URL;
  3. export const fetchDataObjects = async() => {
  4. const header = {
  5. 'Content-Type': 'application/json',
  6. 'Authorization': `Token ${localStorage.token}`,
  7. }
  8. const data ={"dataId": 1, "date": "2018-03-01", "days": 9 }
  9. const res= await axios.get(`${baseUrl}/ayx-api/`,{data:JSON.stringify(data)}, {headers: header})
  10. // above line need to helop
  11. return res.data;
  12. }

如何在get方法中使用axios发送body中的数据?
先谢谢你。

dgiusagp

dgiusagp1#

The HTTP GET method requests shouldn't have a request body,axios不能创建带主体的GET请求,也不能为你创建查询字符串,如果你想传递查询字符串,你必须手动完成,或者用类似qs

  1. axios.get(`${baseUrl}/ayx-api/${qs.stringify(data)}`)
hfsqlsce

hfsqlsce2#

你可以创建一个带主体的GET请求,你需要把主体传递给AxiosRequestConfigaxios.get方法的第二个参数)。

  1. let body = {hit: "floor"} //can be a string or an object (refer to the docs)
  2. axios.get(`url`, {data: body})

AxiosRequestConfig也接受标头(如果需要)。

  1. axios.get(`url`, {headers: {"Key": "keykeykey"}, data: body})

虽然文档中说data
仅适用于请求方法'PUT'、'POST'、'DELETE'和'PATCH'
您可以实际传递主体(在axios 0.27中测试),服务器应该¹接收它。您还需要确保服务器将接受这样的请求since the constrain in the specification was removed almost a decade ago
¹ -引用自MDN's GET page
注意:在GET请求中发送主体/有效负载可能会导致一些现有的实现拒绝请求-虽然规范没有禁止,但语义是未定义的。最好避免在GET请求中发送有效负载。
我正在使用axios进行NestJS e2 e测试,带有ExpressJS的NestJS 9.1将接受GET请求中的主体(是的,您可以使用@Body()装饰器检索它)。

相关问题