简介
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
安装
npm install axios
axios API
可以通过向 axios 传递相关配置来创建请求
axios(config)
// 发送 POST 请求
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
});
// 获取远端图片
axios({
method:'get',
url:'http://bit.ly/2mTM3nY',
responseType:'stream'
}).then(function(response) {
response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
});
axios(url[, config])
// 发送 GET 请求(默认的方法)
axios('/user/12345');
请求方法的别名
为方便起见,为所有支持的请求方法提供了别名
axios.request(config) axios.get(url[, config]) axios.delete(url[, config]) axios.head(url[, config]) axios.options(url[, config]) axios.post(url[, data[, config]]) axios.put(url[, data[, config]]) axios.patch(url[, data[, config]])
创建实例
可以使用自定义配置新建一个 axios 实例
axios.create(config)
const instance = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 1000,
headers: {'X-Custom-Header': 'foobar'}
});
实例方法
以下是可用的实例方法。指定的配置将与实例的配置合并。
instance#request(config)
instance#get(url[, config])
instance#delete(url[, config])
instance#delete(url[, config])
instance#head(url[, config])
instance#head(url[, config])
instance#options(url[, config])
instance#options(url[, config])
instance#post(url[, data[, config]])
instance#post(url[, data[, config]])
instance#put(url[, data[, config]])
instance#put(url[, data[, config]])
instance#patch(url[, data[, config]])
instance#patch(url[, data[, config]])
请求配置
这些是创建请求时可以用的配置选项。只有 url 是必需的。如果没有指定 method,请求将默认使用 get 方法。
{
method: '', // 创建请求时使用的方法, 默认是 'get';
url: '', // 用于请求的服务器 URL;
baseURL: '', // `baseURL` 将自动加在 `url` 前面, 除非 `url` 是一个绝对 URL。
// 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
params: {}, // 即将与请求一起发送的 URL参数, 必须是一个无格式对象(plain object)或 URLSearchParams对象;
data: ..., // `data` 是作为请求主体被发送的数据, 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH' 在没有
// 设置 `transformRequest`时,必须是以下类型之一: string, plain object, ArrayBuffer,
// ArrayBufferView, URLSearchParams, 浏览器专属: FormData, File, Blob, Node 专属: Stream;
transformRequest: [(data, headers) => { // `transformRequest`允许在向服务器发送前, 修改请求数据, 只能
// 用在 'PUT', 'POST'和 'PATCH'这几个请求方法后面数组中的函数
// 必须返回一个字符串,或 ArrayBuffer,或 Stream;
return data; // 对 data进行任意转换处理;
}],
transformResponse: [(data) => { // `transformResponse`在传递给 then/catch前,允许修改响应数据;
return data; // 对 data进行任意转换处理;
}],
paramsSerializer: (params) => { // `paramsSerializer`是一个负责 `params` 序列化的函数;
return Qs.stringify(params, {arrayFormat: 'brackets'})
},
auth: {}, // `auth`表示应该使用 HTTP基础验证,并提供凭据,这将设置一个 `Authorization`头,覆写掉现有的任意
// 使用 `headers`设置的自定义 `Authorization`头;
headers: {'X-Requested-With': 'XMLHttpRequest'}, // `headers`是即将被发送的自定义请求头;
withCredentials: false, // 表示跨域请求时是否需要使用凭证,默认是 false;
responseType: 'json', // 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json',
// 'text', 'stream', 默认值为 'json';
timeout: 1000, // 指定请求超时的毫秒数(0 表示无超时时间), 如果请求话费了超过 `timeout`的时间,请求将被中断;
}
响应结构
某个请求的响应包含以下信息
{
data: {}, // `data`由服务器提供的响应;
status: 200, // `status`来自服务器响应的 HTTP 状态码;
statusText: 'OK', // `statusText`来自服务器响应的 HTTP 状态信息;
headers: {}, // `headers`服务器响应的头;
config: {}, // `config`是为请求提供的配置信息;
request: {} // '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
}
拦截器
在请求或响应被 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); // 对响应错误做点什么
});