axios的使用
Axios:
是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中
特征:
1.从浏览器中创建 XMLHttpRequests
2.从 node.js 创建 http 请求
3.支持 Promise API
4.拦截请求和响应
5.转换请求数据和响应数据
6.取消请求
7.自动转换 JSON 数据
8.客户端支持防御 XSRF
需要储备的知识:
1.http(报文,content-type等)
2.promise
3.ajax
目标:
扫除axios的使用语法
按需写出拦截器
一:请求语法
二:请求配置参数
三:响应结构
四:创建实例及拦截器
五:配置的默认值/defaults
六:axios默认的配置(注意事项)
七:源码解读
一:请求语法:
1.请求方法的别名:
1.1执行 get/delete请求:
axios.get/delete('/user?ID=12345')
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
// 可选地,上面的请求可以这样做(参数一:请求url(字符串);参数二:请求参数(一个对象);参数三:请求配置参数(一个对象))
axios.get/delete('/user', {
params: {
ID: 12345
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
1.2执行 POST /PUT请求:(参数一:请求url(字符串);参数二:请求参数(一个对象);参数三:请求配置参数(一个对象))
axios.post/put('/user', { firstName: 'Fred', lastName: 'Flintstone' }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });
2.向 axios 传递相关配置来创建请求:
2.2发送 POST 请求:
axios({ method: 'get', url: '/user/12345', data: { firstName: 'Fred', lastName: 'Flintstone' } });
2.2发送 POST 请求:
axios({ method: 'post', url: '/user/12345', params: { firstName: 'Fred', lastName: 'Flintstone' } });
二:请求配置参数(【请求方法的别名(放置到第三个参数),默认axios实例的向 axios 传递相关配置来创建的请求及自己配置的实例的实例方法都可以使用】)
这些是创建请求时可以用的配置选项(截取部分,完整请看axios文档的 请求配置 ):
{
// `url` 是用于请求的服务器 URL
url: '/user',
// `method` 是创建请求时使用的方法
method: 'get', // 默认是 get
//`baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
// 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
baseURL: 'https://some-domain.com/api/',
// `headers` 是即将被发送的自定义请求头
headers: {'X-Requested-With': 'XMLHttpRequest'},
// `params` 是即将与请求一起发送的 URL 参数
// 必须是一个无格式对象(plain object)或 URLSearchParams 对象
params: {
ID: 12345
},
// `data` 是作为请求主体被发送的数据
// 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
// 在没有设置 `transformRequest` 时,必须是以下类型之一:
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
// - 浏览器专属:FormData, File, Blob
// - Node 专属: Stream
data: {
firstName: 'Fred'
},
// `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
// 如果请求话费了超过 `timeout` 的时间,请求将被中断
timeout: 1000,
// `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
responseType: 'json', // 默认的
}
三:响应结构
1.某个请求的响应包含以下信息
{
// `data` 由服务器提供的响应
data: {},
// `status` 来自服务器响应的 HTTP 状态码
status: 200,
// `statusText` 来自服务器响应的 HTTP 状态信息
statusText: 'OK',
// `headers` 服务器响应的头
headers: {},
// `config` 是为请求提供的配置信息
config: {}
}
2.使用 then 时,你将接收下面这样的响应:
axios.get('/user/12345')
.then(function(response) {
console.log(response.data);
console.log(response.status);
console.log(response.statusText);
console.log(response.headers);
console.log(response.config);
});
四:创建实例及拦截器:
可以使用自定义配置新建一个 axios 实例,用来统一设置路径前缀等属性。
1.创建实例
var instance = axios.create({ baseURL: 'https://some-domain.com/api/', timeout: 1000, headers: {'X-Custom-Header': 'foobar'} });
2.实例方法:
实例的方法与本文第一点请求语法中请求方法的别名的语法一致,只是实例要为自己创建的实例,这样实例方法才能使用到统一配置的属性和经过拦截器。
3.拦截器
在请求或响应被 then 或 catch 处理前拦截它们。
3.1:默认的axios添加拦截器
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
// config为一个对象 第二点中请求配置参数里面的参数
// 在发送请求之前做些什么
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
// 对响应数据做点什么
return response;
}, function (error) {
// 对响应错误做点什么
return Promise.reject(error);
});
3.2:为自定义 axios 实例添加拦截器
var instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});
五:配置的默认值/defaults:
1.你可以指定将被用在各个请求的配置默认值
全局的 axios 默认值(写入lib/defaults.js,创建新的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
2.自定义实例默认值
// 创建实例时设置配置的默认值
var instance = axios.create({
baseURL: 'https://api.example.com'
});
// 在实例已创建后修改默认值
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
3.配置的优先顺序
配置会以一个优先顺序进行合并。这个顺序是:在 lib/defaults.js 找到的库的默认值,然后是实例的 defaults 属性,最后是请求的 config 参数。后者将优先于前者。这里是一个例子:
// 使用由库提供的配置的默认值来创建实例
// 此时超时配置的默认值是 `0`
var instance = axios.create();
// 覆写库的超时默认值
// 现在,在超时前,所有请求都会等待 2.5 秒
instance.defaults.timeout = 2500;
// 为已知需要花费很长时间的请求覆写超时设置
instance.get('/longRequest', {
timeout: 5000
});
六:axios默认的配置(注意事项):
1.使用向 axios 传递相关配置来创建请求的post请求参数放在data里面,get请求参数放在params里
2.axios的默认Content-type为applicaltion/json
3.axios内部会自动对Object的入参进行转换,转换成json字符串,其实就是JSON.stringify的操作,同时,会指定Content-type为applicaltion/json。