加装
采用 npm:
$ npm install axios
采用 bower:
$ bower install axios
采用 cdn:
<script src=“https://unpkg.com/axios/dist/axios.min.js”></script>
继续执行 GET 允诺
// 为取值 ID 的 user 建立允诺
axios.get(/user?ID=12345)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
// 下面的允诺也能这种做
axios.get(/user, {
params: {
ID: 12345
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
继续执行 POST 允诺
axios.post(/user, {
firstName: Fred,
lastName: Flintstone
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
继续执行数个mammalian允诺
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) {
// 两个允诺现在都继续执行完成
}));
建立实例
能采用自定义配置新建一个 axios 实例
axios.create([config])
const instance = axios.create({
baseURL: https://some-domain.com/api/,
timeout: 1000,
headers: {X-Custom-Header: foobar}
});
响应结构
某个允诺的响应包含以下信息
{
// `data` 由服务器提供的响应
data: {},
// `status` 来自服务器响应的 HTTP 状态码
status: 200,
// `statusText` 来自服务器响应的 HTTP 状态信息
statusText: OK,
// `headers` 服务器响应的头
headers: {},
// `config` 是为允诺提供的配置信息
config: {},
// request
// `request` is the request that generated this response
// It is the last ClientRequest instance in node.js (in redirects)
// and an XMLHttpRequest instance the browser
request: {}
}
采用 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 默认值
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;
自定义实例默认值
// Set config defaults when creating the instance
const instance = axios.create({
baseURL: https://api.example.com
});
// Alter defaults after instance has been created
instance.defaults.headers.common[Authorization] = AUTH_TOKEN;
配置的优先顺序
配置会以一个优先顺序进行合并。这个顺序是:在 lib/defaults.js 找到的库的默认值,然后是实例的 defaults 属性,最后是允诺的 config 参数。后者将优先于前者。这里是一个例子:
// 采用由库提供的配置的默认值来建立实例
// 此时超时配置的默认值是 `0`
var instance = axios.create();
// 覆写库的超时默认值
// 现在,在超时前,所有允诺都会等待 2.5 秒
instance.defaults.timeout = 2500;
// 为已知需要花费很长时间的允诺覆写超时设置
instance.get(/longRequest, {
timeout: 5000
});
拦截器
在允诺或响应被 then 或 catch 处理前拦截它们。
// 添加允诺拦截器
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);
});
如果你想在稍后移除拦截器,能这种:
const myInterceptor = axios.interceptors.request.use(function () {/*…*/});
axios.interceptors.request.eject(myInterceptor);
能为自定义 axios 实例添加拦截器
const instance = axios.create();
instance.interceptors.request.use(function () {/*…*/});
取消
采用 cancel token 取消允诺
Axios 的 cancel token API 基于cancelable promises proposal,它还处于第一阶段。能采用 CancelToken.source 工厂方法建立 cancel token,像这种:
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
axios.get(/user/12345, {
cancelToken: source.token
}).catch(function(thrown) {
if (axios.isCancel(thrown)) {
console.log(Request canceled, thrown.message);
} else {
// 处理错误
}
});
axios.post(/user/12345, {
name: new name
}, {
cancelToken: source.token
})
// 取消允诺(message 参数是可选的)
source.cancel(Operation canceled by the user.);
还能通过传递一个 executor 函数到 CancelToken 的构造函数来建立 cancel token:
const CancelToken = axios.CancelToken;
let cancel;
axios.get(/user/12345, {
cancelToken: new CancelToken(function executor(c) {
// executor 函数接收一个 cancel 函数作为参数
cancel = c;
})
});
// cancel the request
cancel();
参考文章:axios 中文文档