PS:本文代码在vue-cli3构建的基础vue项目之上进行编写:vue create my-project
axios 是一个基于 promise 的 http 库,可以用在浏览器和 node.js 中, 也是vue官方推荐使用的http库。
axios很好用,其中之一就是它的拦截器十分强大,我们可以为请求和响应设置拦截器,比如请求拦截器可以在每个请求里加上token,做了统一处理后维护起来也方便,响应拦截器可以在接收到响应后先做一层操作,如根据状态码判断登录状态、授权。
之前初学的时候,经常将axios数据请求写在各组件方法内,但实践证明,如果项目接口变动要修改url地址等参数会比较为麻烦,不易维护,于是需要对axios进行封装并将接口统一管理。
当然在最之前,我们需要安装axios,使用命令 npm install axios --save 即可。
一、新建函数文件
在 src目录 下新建一个 axios目录,然后在里面创建 axios-request.js 和 axios-api.js 两个文件,
其中 aixos-request.js 用于对axios进行封装,axios-api.js 用于接口的统一管理。
二、对axios进行封装
axios-request.js代码如下:
import axios from "axios"; import { Message } from "element-ui"; // 创建一个axios实例 const axiosService = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url timeout: 5000 // 设置超时时间为5s }); // request拦截器 ==> 对请求参数进行处理 axiosService.interceptors.request.use( config => { // 可以在发送请求之前做些事情 // 比如请求参数的处理、在headers中携带token等等 return config; }, error => { // 处理请求错误 console.log(error); // for debug Promise.reject(error); } ); // respone拦截器 ==> 对响应做处理 axiosService.interceptors.response.use( response => { const res = response.data; // 如果自定义的返回码不等于200, 就返回一个错误 if (res.code !== 200) { return Promise.reject(new Error(res.message || "Error")) } else { return res; } }, error => { // 判断error的status代码,并将对应的信息告知用户 let text = ""; let err = JSON.parse(JSON.stringify(error)); if (err.response.status) { switch (error.response.status) { case 400: text = "请求错误(400),请重新申请"; break; case 401: text = "登录错误(401),请重新登录"; return this.$router.replace("/login"); case 403: text = "拒绝访问(403)"; break; case 404: text = "请求出错(404)"; break; case 408: text = "请求超时(408)"; break; case 500: text = "服务器错误(500),请重启软件或切换功能页!"; break; case 501: text = "服务未实现(501)"; break; case 502: text = "网络错误(502)"; break; case 503: text = "服务不可用(503)"; break; case 504: text = "网络超时(504)"; break; case 505: text = "HTTP版本不受支持(505)"; break; default: text = "网络连接出错"; } } else { text = "连接服务器失败,请退出重试!"; } Message({ showClose: true, message: text, type: "error" }); return Promise.reject(error); } ); // 将写好的axios实例暴露出去 export default axiosService;
三、对接口进行统一管理
axios-api.js代码如下:
import axiosService from "./axios-request"; // 从axios-request.js内引入axiosService // 下面是POST形式 export const userLogin = data => { return axiosService({ url: "/xxxx/user/xxxx", // 根据实际接口地址来写 method: "post", data }); }; // 下面是GET形式 export const userInfo = params => { return axiosService({ url: "/xxxx/user/xxxx", // 根据实际接口地址来写 method: "get", params }); };
这里要注意下,post参数放在data内,get参数放在params内!
四、在组件内使用写好的接口
在组件中使用:
下面是模拟的一个登录接口,代码不太严谨,仅演示大致用法:
<script> import {userLogin} from "@/axios/axios-api"; // 引入登录接口函数 export default { name: "login", components: {}, methods: { async login() { let username = this.username; let password = this.password; let params = { username: username, password: password }; if (!username || !password) { alert("账号或密码不能为空"); } else { if (username.length < 51 && password.length < 51) { let res = await userLogin(params); console.log(res); } else { alert("账号或密码输入字符不能超过50位"); } } } } }; </script>
上面的代码中我们用了 async await,是ES7新出的特性,具体用法可以Google或者到MDN上查看。
五、总结
当然也可以不将接口统一管理,而只用axios封装,然后在组件内写异步请求函数。
以上是个人在之前学习的时候,所用的封装方式,如有错误之处欢迎留言指正。
以上就是Vue封装Axios请求和拦截器的步骤的详细内容,更多关于Vue封装的资料请关注其它相关文章!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】