文章目录

  • 一、axios 定义
  • 二、axios 特性
  • 三、安装和使用
  • 四、请求写法
    • 执行 `GET` 请求:
    • 执行 `POST` 请求:
    • 执行多个并发请求:
  • 五、axios API
  • 六、创建实例
  • 七、请求配置
  • 八、响应结构
  • 九、配置默认值
    • 全局的 axios 默认值
    • 自定义实例默认值
  • 十、拦截器

一、axios 定义

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中

二、axios 特性

axios 的优势:

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 CSRF

三、安装和使用

  • 指令安装:npm i --S axios
  • 直接引用:<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);});

执行多个并发请求:

  • 异步请求的同步化,必须两个请求都执行完才会返回结果,如果中间某个请求失败,则中断
  • axios.all(iterable)
  • axios.spread(callback)
//获得用户信息的请求
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) {// 两个请求现在都执行完成})).catch(function (error) {console.log(error);});

注意:axios.all方法接受一个数组作为参数,数组中的每个元素都是一个请求,返回一个promise对象,当数组中所有请求均已完成时,执行then方法。
在then方法中执行了 axios.spread 方法。该方法是接收一个函数作为参数,返回一个新的函数。接收的参数函数的参数是axios.all方法中每个请求返回的响应。

注意:axios.all 缺点,所有的请求都成功的情况下再返回一个结果;如果有一个失败了,就会走 catch error的分支,请求中断

五、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 实例
  • axios.create([config])
const instance = axios.create({baseURL: 'https://some-domain.com/api/',timeout: 1000, headers: {'X-Custom-Header': 'foobar'}
});

实例方法

  • 以下是可用的实例方法。指定的配置将与实例的配置合并。

  • 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]])

七、请求配置

  • config为axios的各种配置
  • 常用配置如:
{// `url` 是用于请求的服务器 URLurl: '/user',// `method` 是创建请求时使用的方法method: 'get', // default// `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。// 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URLbaseURL: 'https://some-domain.com/api/',// `headers` 是即将被发送的自定义请求头,header中可以配置Authorization 传递 tokenheaders: {'X-Requested-With': 'XMLHttpRequest'},// `params` 是即将与请求一起发送的 URL 参数,一般链接在URL后面  // 必须是一个无格式对象(plain object)或 URLSearchParams 对象params: {ID: 12345},// `data` 是作为请求主体被发送的数据// 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'// 在没有设置 `transformRequest` 时,必须是以下类型之一:// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams// - 浏览器专属:FormData, File, Blob// - Node 专属: Streamdata: {firstName: 'Fred'},// `timeout` 指定请求超时的毫秒数(0 表示无超时时间)// 如果请求话费了超过 `timeout` 的时间,请求将被中断timeout: 1000,// `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'responseType: 'json', // default}
  • 其他一些不常用的配置:
{// `transformRequest` 允许在向服务器发送前,修改请求数据// 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法// 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 StreamtransformRequest: [function (data, headers) {// 对 data 进行任意转换处理return data;}],// `transformResponse` 在传递给 then/catch 前,允许修改响应数据transformResponse: [function (data) {// 对 data 进行任意转换处理return data;}],// `paramsSerializer` 是一个负责 `params` 序列化的函数// (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)paramsSerializer: function(params) {return Qs.stringify(params, {arrayFormat: 'brackets'})},// `withCredentials` 表示跨域请求时是否需要使用凭证withCredentials: false, // default// `adapter` 允许自定义处理请求,以使测试更轻松// 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).adapter: function (config) {/* ... */},// `auth` 表示应该使用 HTTP 基础验证,并提供凭据// 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头auth: {username: 'janedoe',password: 's00pers3cret'},// `responseEncoding` 指定用于解码响应的编码// 注意:对于'stream'的' responseType '或客户端请求将被忽略responseEncoding: 'utf8', // default// `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称xsrfCookieName: 'XSRF-TOKEN', // default// ' xsrfHeaderName '是携带xsrf令牌值的http报头的名称xsrfHeaderName: 'X-XSRF-TOKEN', // default// `onUploadProgress` 允许为上传处理进度事件onUploadProgress: function (progressEvent) {// 对本机进度事件执行您想要的任何操作},// `onDownloadProgress` 允许为下载处理进度事件onDownloadProgress: function (progressEvent) {// 对原生进度事件的处理},// `maxContentLength` 定义允许的响应内容的最大尺寸maxContentLength: 2000,// `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject  promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejectevalidateStatus: function (status) {return status >= 200 && status < 300; // default},// `maxRedirects` 定义在 node.js 中 follow 的最大重定向数目// 如果设置为0,将不会 follow 任何重定向maxRedirects: 5, // default// `socketPath` 定义在node.js中使用的UNIX套接字// 例如: '/var/run/docker.sock' 向docker守护进程发送请求// 只能指定' socketPath '或' proxy '// 如果两者都指定了, 使用`socketPath` socketPath: null, // default// `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:// `keepAlive` 默认没有启用httpAgent: new http.Agent({ keepAlive: true }),httpsAgent: new https.Agent({ keepAlive: true }),// 'proxy' 定义代理服务器的主机名称和端口// `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据// 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。proxy: {host: '127.0.0.1',port: 9000,auth: {username: 'mikeymike',password: 'rapunz3l'}},// `cancelToken` 指定用于取消请求的 cancel tokencancelToken: new CancelToken(function (cancel) {})
}

八、响应结构

{// `data` 由服务器提供的响应data: {},// `status` 来自服务器响应的 HTTP 状态码status: 200,// `statusText` 来自服务器响应的 HTTP 状态信息statusText: 'OK',// `headers` 服务器响应的头headers: {},// `config` 是为请求提供的配置信息config: {},// ' request '是生成此响应的请求// 它是node.js中的最后一个ClientRequest实例(在重定向中)// 以及浏览器的XMLHttpRequest实例request: {}
}

九、配置默认值

你可以指定将被用在各个请求的配置默认值

全局的 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';

自定义实例默认值

// 在创建实例时设置config defaults
const instance = axios.create({baseURL: 'https://api.example.com'
});// 在创建实例之后更改默认值
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;

十、拦截器

  • 在请求或响应被 thencatch 处理前拦截它们。
// 添加请求拦截器
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);});
  • 可以为自定义 axios 实例添加拦截器
const instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

【Vue】axios 配置详解相关推荐

  1. vue中使用ECharts实现中国地图配置详解(配官方配置地址)

    前言: 1.实现自定义左下角的视觉映射组件(包括自定义颜色.文字.图元大小) 2.实现自定义悬浮提示框 如下图所示: 实现步骤: 一.在vue中安装echarts 1.npm install echa ...

  2. vue-cli3全面配置详解

    vue-cli3全面配置详解 vue-cli3-config 创建项目 配置环境变量 通过在package.json里的scripts配置项中添加–mode xxx来选择不同环境 在项目根目录中新建. ...

  3. vue-cli3.0配置详解

    这次给大家带来vue-cli3.0配置详解,使用vue-cli3.0配置的注意事项有哪些,下面就是实战案例,一起来看一下. 新建项目 1 2 3 4 5 6 7 8 # 安装 npm install ...

  4. vscode中setting.json配置详解

    vscode中的setting.json配置文件配置详解 话不多说上配置文件 大家按需复制到自己的setting.json配置文件中即可 [{// 控制是否在编辑器中显示 CodeLens." ...

  5. 一篇由简到难的 Vue 面试题+详解答案

    作者:Big shark@LX 原文:https://juejin.cn/post/6961222829979697165 前言 本文整理了「高频」出现的 Vue 相关面试题并且附带「详解答案」 难度 ...

  6. 最全最详细前端vue面试题+详解答案(拿到高薪offer不是梦)

    最全vue面试题+详解答案 1.MVC 和 MVVM 区别 MVC MVC全名是 Model View Controller,时模型 - 视图 - 控制器的缩写,一种软件设计典范. Model(模型) ...

  7. nginx免安装版资源,config配置详解

    前言:今天给同事看他本地nginx的报错,虽然我也是半吊子,但觉得可能还是配置问题,所以把配置捋了一遍,做个学习记录,也希望能帮到有需要的人,如有错误感谢指出. 文章目录 资源介绍 一.目录结构介绍 ...

  8. vue组件component详解

    vue组件component详解 组件介绍 组件: ​ 组件是拥有一定功能多个html标签的集合体,是对html标签的封装. 好处: ​ 模板中为了实现一个(例如分页)效果,需要绘制20个html标签 ...

  9. 【面试题】973- 一篇由简到难的 Vue 面试题+详解答案

    作者:Big shark@LX 原文:https://juejin.cn/post/6961222829979697165 前言 本文整理了「高频」出现的 Vue 相关面试题并且附带「详解答案」 难度 ...

最新文章

  1. powerbuider11 C/S 转换为B/S
  2. python画双折线图-Python Pandas 时间序列双轴折线图
  3. x3m文件怎么转换成mp3_视频中的音频怎么单独提取出来转换成mp3格式
  4. Citrix WebInterface 配置向导
  5. java获取数组的最小值_Java 数组获取最大和最小值的实例实现
  6. 电脑fps低怎么办_电脑想要英雄联盟玩的流畅,主要看哪几个方面?
  7. ORM是什么?如何理解ORM?
  8. ArcGIS Server Java 9.3 REST API的中文查询问题的解决方案
  9. layui table勾选框的修改_layui表格(Table)下添加可更新拉选择框select
  10. flume学习(五):使用hive来分析flume收集的日志数据
  11. [恢]hdu 2206
  12. sqlyog简单入门使用
  13. 实现财务自由 之 你不可不知的投资股票、基金、房地产、REITs等指数指标查询必备网址(市盈率、国债收益率、派息率等等)
  14. java加载dll文件失败
  15. STM32时钟系统与时钟启动顺序详解
  16. 最新版谷歌浏览器每次都要允许flash解决方法
  17. plantuml样式_PlantUML之活动图
  18. MY9221 使用心得
  19. explorer被微信企业版劫持一例
  20. 李彦宏:去年“吹的牛”我兑现了!百度无人车今天正式量产!

热门文章

  1. mysql 数据类型 ppt_第4章__MySQL数据类型.ppt
  2. 对python的理解_对的解释|对的意思|汉典“对”字的基本解释
  3. 掷骰子python代码_如何使用python的random模拟掷骰子的数据
  4. npm 淘宝镜像安装失败问题(Nodejs)
  5. QRCode.js 生成二维码详细API和参数
  6. D10 sql labs
  7. 使用OKR重新定义绩效管理策略
  8. 怎么还原计算机系统还原,电脑系统还原,教您win7怎么系统还原
  9. python+selenium爬取某网专利数据
  10. 豪车阵容强大 电影与车之《极品飞车》