十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这期内容当中小编将会给大家带来有关Vue实现封装Axios请求和拦截器的方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
目前创新互联已为上1000+的企业提供了网站建设、域名、网页空间、网站托管、服务器租用、企业网站设计、石家庄网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。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;