热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Vue项目使用axios相关解说

介绍Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中。点击看这个吧从浏览器中创建XMLHttpRequests从node.js创建

介绍

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
点击看这个吧

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

get请求

axios.get('/user', {params: {ID: 1111}})
.then(function (response) {console.log(response);
})
.catch(function (error) {console.log(error);
});// 还可以这么写,es7新特性async/await
async function getUser() {try {const response = await axios.get('/user?ID=1111');console.log(response);} catch (error) {console.error(error);}
}*async用于声明一个函数是异步的,而await是“等待”的意思,就是用于等待异步完成。
await只能在async函数中使用。
await可以让js进行等待,直到一个promise执行并返回它的结果,js才会继续往下执行。
async/await 面试经常问到哦,百度查一下,划重点

post请求

axios.post('/user', {firstName: 'xiliDong',lastName: 'dongxili'})
.then(function (response) {console.log(response);
})
.catch(function (error) {console.log(error);
});
//或者这样写
axios({method: 'post',url: '/user',data: {firstName: 'xiliDong',lastName: 'dongxili'}
});

执行多个并发请求

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

var instance = axios.create({baseURL: '请求地址前缀',timeout: 1000,headers: {'X-Custom-Header': 'foobar'}
});

响应结构:

{data: {}, // data由服务器提供的响应status: 200, // 服务器响应的 HTTP 状态码statusText: 'OK', // 服务器响应的 HTTP 状态信息headers: {}, // 服务器响应的头config: {} // 为请求提供的配置信息
}使用 then 时,你将接收下面这样的响应:
axios.get('/user/1111').then(function(response) {console.log(response.data);console.log(response.status);console.log(response.statusText);console.log(response.headers);console.log(response.config);});

指定配置的默认值:

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({baseURL: 'https://api.example.com'
});
// 在实例已创建后修改默认值
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;

拦截器:

// request拦截器
import axios from 'axios'
import router from '../router'
// 创建axios实例
const service = axios.create({timeout: null // 请求超时时间
})
let serviceTips = '服务器超时'// request拦截器
service.interceptors.request.use(config => {// console.log(service.interceptors)// 获取本地tokenlet token = localStorage.getItem('tokendata')// 设置请求头let headers = 'application/json'// 是否携带tokenlet tokenFlag = true// 是否修改请求信息if (config.opts) {// 获取携带token状态tokenFlag = config.opts ? config.opts.token : true// 获取请求头headers = config.opts.Header ? config.opts.Header : 'application/json'// 拓展头部参数let Head = config.opts.Headif (Head) {for (let key in Head) {config.headers[key] = Head[key]}}}// 暂时不加入token验证// if (token && tokenFlag) {// // 条件允许,携带token请求// config.headers['JSESSIONID'] = token// // config.headers['X-Auth0-Token'] = token// } else {// headers = 'application/x-www-form-urlencoded'// }// 设置请求格式config.headers['Content-Type'] = headersreturn config},err => {return Promise.reject(err)}
)// http response 服务器响应拦截器
service.interceptors.response.use(response => {return response},error => {if (error.response) {switch (error.response.status) {case 401:error.response.data = '登陆超时,重新登陆'router.replace({path: '/login',query: {redirect: router.currentRoute.fullPath} // 登录成功后跳入浏览的当前页面})breakcase 404:error.response.data = '资源不存在'breakcase 406:error.response.data = '头部无携带token'breakcase 412:// 拦截错误 并重新跳入登页重新获取tokenrouter.replace({path: '/login',query: {redirect: router.currentRoute.fullPath} // 登录成功后跳入浏览的当前页面})error.response.data = '秘钥失效'localStorage.removeItem('tokendata') // 清除tokenbreakcase 415:error.response.data = '请求type有误'breakcase 500:error.response.data = '服务器异常'break}serviceTips = error.response.data}Message.error(serviceTips)return Promise.reject(serviceTips)}
)
export default service

配置好后使用:

在api.js中引入拦截器:
import fetch from '@/utils/fetch' // 拦截器
export function getList(obj) {const data = objreturn fetch({url: '',method: 'POST',data})
}--------------------------------
可以使用 validateStatus 配置选项定义一个自定义 HTTP 状态码的错误范围。
export function getList(obj) {const data &#61; objreturn fetch({url: &#39;&#39;,method: &#39;POST&#39;,validateStatus: function(status) {// return status >&#61; 200 && status <300; // 默认的return status < 500; // 状态码在大于或等于500时才会 reject},data})
}

重点

axios的请求头默认为&#39;application/json&#39;&#xff0c;
即axios会默认序列化 Javascript 对象为 JSON.
如果想使用 application/x-www-form-urlencoded 格式&#xff0c;你可以使用下面的配置:
import Qs from &#39;qs&#39;export function getList(obj) {const data &#61; Qs.stringify(obj)return fetch({url: &#39;&#39;,method: &#39;POST&#39;,headers: {&#39;content-type&#39;: &#39;application/x-www-form-urlencoded&#39;,// 如果需要XMLHttpRequest&#xff0c;加入这个&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;},data})
}

单页面使用

import {getList} from &#39;&#64;/api/base.js&#39;
// param为前端传入的参数
getList(param).then(res &#61;> {if (res.data.code &#61;&#61;&#61; 0) {//获取成功业务代码} else {this.$message({message: &#96;[${res.data.msg}]:查询失败&#96;,type: "error"});}
})
.catch(() &#61;> {})

移除拦截器

var 拦截器 &#61; axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(拦截器);

取消请求

可以使用 CancelToken.source 工厂方法创建 cancel token

var CancelToken &#61; axios.CancelToken;
var source &#61; CancelToken.source();axios.get(&#39;/user/1111&#39;, {cancelToken: source.token
}).catch(function(thrown) {if (axios.isCancel(thrown)) {console.log(&#39;Request canceled&#39;, thrown.message);} else {// 处理错误}
});// 取消请求&#xff08;message 参数是可选的&#xff09;
source.cancel(&#39;Operation canceled by the user.&#39;);

还可以通过传递一个 executor 函数到 CancelToken
的构造函数来创建 cancel token&#xff1a;

var CancelToken &#61; axios.CancelToken;
var cancel;axios.get(&#39;/user/12345&#39;, {cancelToken: new CancelToken(function executor(c) {// executor 函数接收一个 cancel 函数作为参数cancel &#61; c;})
});// 取消请求
cancel();注意&#xff0c;还可以使用同一个 cancel token 取消多个请求

点击前往参考地址


推荐阅读
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
author-avatar
瓜子HR刘冲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有