特征:node
1》从浏览器中建立XMLHttpRequest 2》从node.js发出http请求 3》支持Promise API 4》拦截请求和响应 5》转换请求和响应数据 6》取消请求 7》自动转换JSON数据 8》客户端支持防止CSRF/XSRF
1》npm install axios 2》<script src="https://unpkg.com/axios/dist/axios.min.js"></script> import axios from "axios"
1》axios(config) eg: axios({ method:"post", url:"/user", data:{ firstName:"nanhua", lastName:"qiushui" } }); 2》axios(url,config) //默认为get请求 3》请求方法别名 axios.request(config) axios.get(url,config) axios.post(url,data,config) axios.delete(url,config) axios.head(url,config) axios.put(url,data,config) axios.patch(url,data,config) 4》并发 自定义配置建立axios实例 var instance = axios.create({ baseURL:"https://some-domain.com/api/", timeout:1000, headers:{"X-Custom-Header":"foobar"} }) 自定义实例默认值 //建立实例时设置 //实例建立后修改默认值(设置全局axios默认值) axios.defaults.baseURL = "https://api.example.com"; axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; 并发:axios.all(iterable) eg: axios.all([ axios.get("https://api.github.com/xxx/1"); axios.get("https://api.github.com/xxx/2"); ]).then(axios.spread(function(userResp,reposResp){ console.log("User",userResp.data); console.log("Repositories",reposResp.data); })) * 当全部的请求都完成后,会收到一个数组,它包含着响应对象,其中的顺序和请求发送的顺序相同,能够用axios.spread分割成多个单独的响应对象。 5》config参数 baseURL: 'https://some-domain.com/api/', //将自动加在url前面,除非url是一个绝对URL //容许在向服务器发送前,修改请求数据 //只能用在PUT\POST\PATCH //后面数组的函数必须返回一个字符串/ArrayBuffer或Stream transformRequest:[function(data){ //对data进行任意转换处理 return data; }], //在传递给then/catch以前,容许修改响应数据 transformResponse: [function (data) { return data; }], //即将被发送的自定义请求头 headers:{ 'X-Requested-With': 'XMLHttpRequest' }, //即将与请求一块儿发送的URL参数 params:{ ID: 12345 }, //负责params序列化的函数 paramsSerializer:function(params){ return Qs.stringify(params,{arrayFormat: "brackets"}); }, //超时 timeout: 1000, //表示跨域请求时是否须要使用凭证 withCredentials: false, //容许响应内容的最大尺寸 maxContentLength: 2000, //对打重定向数目 maxRedirects:5, //是否启用长链接 httpAgent: new http.Agent({ keepAlive: true }), httpsAgent: new https.Agent({ keepAlive: true }), //代理服务器设置 proxy:{ host:"127.0.0.1", port: 9000, auth:{ username:"nanhuaqiushui", password:"Huawei@123" } } 6》响应结构 { data:{}, status:200, statusText:"OK", headers:{}, //服务器响应的头 config:{} //为请求提供的配置信息 } 7》拦截器 //请求拦截器 axios.interceptors.request.use(function(config){ //发送请求以前作些什么 return config; },function(error){ //请求错误以后作些什么 return Promise.reject(error); }) //响应添加拦截器 axios.interceptors.response.use(function(config){ //发送请求以前作些什么 return config; },function(error){ //请求错误以后作些什么 return Promise.reject(error); }) //移除拦截器 var myInterceptor = axios.interceptors.request.use(function(){ ... }) axios.interceptors.request.eject(myInterceptor);