axios 库是前端非常流行的网络请求库,下面是我刚使用的时候遇到的坑

本地开发跨域问题(CORS),首先在服务端要接受跨域

1
header("Access-Control-Allow-Origin: *");

这个时候 axios 在 post/put 的时候会先发起 option 请求。如果服务器不支持,则返回失败。为了避免这个,要避免 json 请求。qs 库可以把 json 解析成 www-form 的样子,即 a=1&b=2

axios 有两个数据参数 params 和 data,params 会被放到 url 里,data 会被放到 body 里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const qs = require('qs')

param.headers = {
'Content-type': 'application/x-www-form-urlencoded;charset=utf-8'
}
let method = param.method ? param.method.toUpperCase() : 'GET'
if(method == 'POST' || method == 'PUT'){
param.data = qs.stringify(param.data, {arrayFormat: 'brackets'})
} else {
param.params = param.data
param.paramsSerializer = params => {
return qs.stringify(params, {arrayFormat: 'brackets'})
}
}
axios(param)

像上面这样修改后,浏览器就不会报跨域错误了,而且服务端还能获得 form 参数,而不是 json。