Axios 学习
Axios 学习简介Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请求和响应转换请求数据和响应数据取消请求自动转换 JSON 数据客户端支持防御 XSRF配置说明axios({m...
·
Axios 学习
简介
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中
- 从浏览器中创建
XMLHttpRequests - 从
node.js创建http请求 - 支持
Promise API - 拦截请求和响应
- 转换请求数据和响应数据
- 取消请求
- 自动转换
JSON数据 - 客户端支持防御
XSRF
配置说明
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
});
- 常用
url: 用于请求的服务器 URLmethod: 创建请求时使用的方法,默认是getbaseURL: 动加在url前面,除非url是一个绝对 URLheaders: 自定义请求头params: 与请求一起发送的 URL 参数,必须是一个无格式对象(plain object)或URLSearchParams对象data: 作为请求主体被发送的数据,只适用于这些请求方法PUT,POST,PATCH。在没有设置transformRequest时,必须是以下类型之一:
string,lain object,ArrayBuffer,ArrayBufferView,URLSearchParamsbrowser:FormData,File,BlobNode:Stream
responseType: 服务器响应的数据类型,默认jsontimeout: 指定请求超时的毫秒数。默认1000cancelToken: new CancelToken(function (cancel) {}): 指定用于取消请求的cancel token- 返回的响应信息
{
// 服务器提供的响应
data: {},
// 来自服务器响应的 HTTP 状态码
status: 200,
// 来自服务器响应的 HTTP 状态信息
statusText: 'OK',
// 服务器响应的头
headers: {},
// 为请求提供的配置信息
config: {}
}
- 进阶
transformRequest: [function()[] ...]: 允许在向服务器发送前,修改请求数据,只能用在PUT,POST,PATCH这几个请求方法。后面数组中的函数必须返回一个字符串,或ArrayBuffer,或StreamtransformResponse: [function()[] ...]: 在传递给 then/catch 前,允许修改响应数据paramsSerializer: 负责params序列化的函数withCredentials: 表示跨域请求时是否需要使用凭证,默认falseadapter: 自定义处理请求,以使测试更轻松,返回一个promise并应用一个有效的响应auth: { username: 'janedoe', password: 's00pers3cret' }: 表示应该使用 HTTP 基础验证,并提供凭据。这将设置一个Authorization头,覆写掉现有的任意使用headers设置的自定义Authorization头xsrfCookieName: 是用作xsrf token的值的cookie的名称。默认XSRF-TOKENxsrfHeaderName: 是承载xsrf token的值的HTTP头的名称。默认X-XSRF-TOKENonUploadProgress: 允许为上传处理进度事件onDownloadProgress: 允许为下载处理进度事件maxContentLength: 定义允许的响应内容的最大尺寸。默认2000validateStatus: 定义对于给定的HTTP响应状态码是resolve或reject promise。如果validateStatus返回true(或者设置为null或undefined),promise将被resolve; 否则,promise将被rejecte。默认status >= 200 && status < 300将被resolvemaxRedirects: 定义在node.js中follow的最大重定向数目。默认5httpAgent: new http.Agent({ keepAlive: true }) / httpsAgent: new https.Agent({ keepAlive: true }): 分别在node.js中用于定义在执行http和https时使用的自定义代理proxy: 定义代理服务器的主机名称和端口
post: 主机port: 端口auto: 表示 HTTP 基础验证应当用于连接代理,并提供凭据
配置默认值
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';
// 或者
var instance = axios.create();
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
- 配置优先级 : 由低到高
- 库的默认值
- 实例的
defaults属性 - 请求的
config参数
取消请求
使用上述中的配置的 cancelToken 属性
var source = axios.CancelToken.source();
axios.get('/user/12345', {
cancelToken: source.token
});
// 取消请求(message 参数是可选的)
source.cancel('Operation canceled by the user.');
// 或者
var cancel;
axios.get('/user/12345', {
cancelToken: new axios.CancelToken(function(c) {
cancel = c;
})
});
cancel('Operation canceled by the user.');
拦截器
// 添加请求拦截器
axios.interceptors.request.use(
function(config) {
// 在发送请求之前做些什么
return config;
},
function(error) {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 添加响应拦截器
axios.interceptors.response.use(
function(response) {
// 对响应数据做点什么
return response;
},
function(error) {
// 对响应错误做点什么
return Promise.reject(error);
}
);
多并发
function getUserAccount() {
return axios.get('/user/12345');
}
function getUserPermissions() {
return axios.get('/user/12345/permissions');
}
axios.all([getUserAccount(), getUserPermissions()]).then(
axios.spread(function(acct, perms) {
// 两个请求现在都执行完成
})
);
常用语法糖
- 在使用别名方法时, url、method、data 这些属性都不必在配置中指定
axios.request(config)axios.get(url[, config])axios.delete(url[, config])axios.head(url[, config])axios.post(url[, data[, config]])axios.put(url[, data[, config]])axios.patch(url[, data[, config]])
更多推荐



所有评论(0)