【发布时间】:2023-01-26 06:42:35
【问题描述】:
这是我的 axios 配置:
import axios from "axios"
const axiosApi = axios.create({
baseURL: import.meta.env.VITE_API_URL
})
const requestInterceptor = config => {
config.headers['Content-Type'] = 'application/json';
config.headers['Accept'] = 'application/json';
config.headers['X-Client'] = 'React';
return config;
}
axiosApi.interceptors.request.use(requestInterceptor);
const get = async (url) => {
return await
axiosApi.get(url, {
crossDomain: true
}).then(response => {
return response?.data;
})
}
const post = async (url, data) => {
return await axiosApi
.post(url, Array.isArray(data) ? [...data] : { ...data })
.then(response => response?.data)
}
const form = async (url, data) => {
return await axiosApi
.post(url, data, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(response => response?.data)
}
如您所见,对于 post 和 get 实用程序方法,我使用了一个设置默认值的请求拦截器。因此我为他们使用Content-Type: application/json。
但是,对于form,我将Content-Type 标头覆盖为一个表单。
我读了一些其他问题,包括:
Axios not passing Content-Type header
Axios Header's Content-Type not set for safari
但是我的服务器允许在 CORS 请求中发送 Content-Type:
Access-Control-Allow-Headers: authorization,content-type,x-client
Access-Control-Allow-Methods: POST
Access-Control-Allow-Origin: *
但是当我使用form方法时,我看到Content-Type没有设置为application/json,而不是application/x-www-form-urlencoded。
我做错了什么?
【问题讨论】:
-
为什么要搞乱 Axios 默认处理内容类型标头的方式?
-
混乱?这一切都来自它的文档。我们使用拦截器,它们来自文档。
-
您不需要
response?.data中的可选链接。如果请求得到解决,response保证是一个Axios response 实例
标签: javascript axios