当前位置:   article > 正文

Vue2-axios三层封装_vue2 axios封装

vue2 axios封装

第一层:工具函数层

        对axios工具进行增强,如:设置公共的请求服务器、设置请求拦截器、设置响应拦截器...

        在这一层封装中,可以将axios库的默认地址设置为项目中的公共地址,同时设置请求拦截器和相应拦截器,以处理一些公共的请求和相应逻辑(例:获取token、处理错误信息等)

        第一步  =>  创建文件夹:utlis/request.js

  1. // axios的三层封装:第一层 => 对axios进行增强
  2. import axios from "axios";
  3. // 引入本地存储数据
  4. import local from "@/utils/local.js";
  5. // 1.设置公共服务器路径
  6. axios.defaults.baseURL = 'http://sell.h5.itsource.cn:8087';
  7. // 2.添加请求拦截器
  8. axios.interceptors.request.use(function (config) {
  9. // 发请求时,自动携带token
  10. let token = local.get("token");
  11. if(token){
  12. config.headers.Authorization = 'Bearer ' + token;
  13. }
  14. return config;
  15. }, function (error) {
  16. // 对请求错误做些什么
  17. return Promise.reject(error);
  18. });
  19. // 3.添加响应拦截器
  20. axios.interceptors.response.use(function (response) {
  21. // 2xx 范围内的状态码都会触发该函数 // 访问成功时执行
  22. // 判断是否获取数据成功
  23. if(typeof (response.data.code) === "number"){ //如果response.data.code是数字就弹提示框,如果不是就不弹
  24. if(response.data.code === 0){
  25. alert(response.data.msg);
  26. }else{
  27. alert(response.data.msg);
  28. }
  29. }
  30. return response;
  31. }, function (error) {
  32. // 超出 2xx 范围的状态码都会触发该函数 // 访问失败时执行
  33. return Promise.reject(error);
  34. });
  35. // 暴露增强后的axios
  36. export default axios;

        如果觉得弹出框不好看想使用Element UI的弹出框,可以引入全局的Message

  1. // axios的三层封装:第一层 => 对axios进行增强
  2. import axios from "axios";
  3. //引入全局的Message(Element UI)
  4. import { Message } from "element-ui";
  5. // 引入本地存储数据
  6. import local from "@/utils/local.js";
  7. // 1.设置公共服务器路径
  8. axios.defaults.baseURL = 'http://sell.h5.itsource.cn:8087';
  9. // 2.添加请求拦截器
  10. axios.interceptors.request.use(function (config) {
  11. // 发请求时,自动携带token
  12. let token = local.get("token");
  13. if(token){
  14. config.headers.Authorization = 'Bearer ' + token;
  15. }
  16. return config;
  17. }, function (error) {
  18. // 对请求错误做些什么
  19. return Promise.reject(error);
  20. });
  21. // 3.添加响应拦截器
  22. axios.interceptors.response.use(function (response) {
  23. // 2xx 范围内的状态码都会触发该函数 // 访问成功时执行
  24. // 判断是否获取数据成功
  25. if(typeof (response.data.code) === "number"){ //如果response.data.code是数字就弹提示框,如果不是就不弹
  26. if(response.data.code === 0){
  27. Message.success(response.data.msg);
  28. }else{
  29. Message.error(response.data.msg);
  30. }
  31. }
  32. return response;
  33. }, function (error) {
  34. // 超出 2xx 范围的状态码都会触发该函数 // 访问失败时执行
  35. return Promise.reject(error);
  36. });
  37. // 暴露增强后的axios
  38. export default axios;

        第二步  =>  创建文件夹(存储数据) :utils/ local.js

  1. export default {
  2. // 获取本地存储的数据
  3. get(key){
  4. return JSON.parse( localStorage.getItem(key) );
  5. },
  6. // 设置本地存储中的数据
  7. set(key, value){
  8. localStorage.setItem( key, JSON.stringify(value) );
  9. },
  10. // 清楚本地存储
  11. clear(){
  12. localStorage.clear();
  13. }
  14. }

第二层:接口函数层

        封装项目中所有请求的公共部分,项目接口有任何的改动只需要改这一层即可

        在这一层封装中,可以将项目中所有请求的公共部分抽象出来(例:请求的URL、请求参数、请求方法、请求头等)封装到一个工具文件中,以便在多个请求中使用。这一层封装可以提高代码的复用性,减少重复的代码

        创建文件夹(应用程序接口):api/user.js(分模块进行创建.js文件)

  1. // axios封装第二层:账号管理模块,所有用户管理模块的接口全部在这里进行封装
  2. import request from "@/utils/request.js"; //引入增强过后的axios
  3. // 登录的接口函数(post方式)
  4. export const checkLogin = function (data) {
  5. return request({
  6. method: 'post',
  7. url: '相应的请求地址',
  8. data: data,
  9. });
  10. },
  11. // 获取用户列表(get方式)
  12. export const userList = function (params) {
  13. return request({
  14. method: 'get',
  15. url: '相应的请求地址',
  16. params: params,
  17. });
  18. }

第三层:应用层

        在实际项目页面中使用接口函数,非常便捷

        在这一层中,可以根据具体的业务需求对请求进行封装(例:封装获取用户列表、添加用户等接口)这一层可以很据具体的业务需求进行定制,提高代码到的可维护性和可扩展性

        在相应的页面引入使用

  1. // axios第三层:使用封装好的接口函数
  2. import {checkLogin} from "@/api/user.js"; //引入(普通引入需要用{}解构)
  3. // 引入local
  4. import local from "@/utils/local.js";
  5. export default {
  6. methods: {
  7. submit() {
  8. this.$refs.form.validate(async (valid) => {
  9. if (valid) {
  10. // 验证通过,提交数据去登陆
  11. let res = await checkLogin(this.form)
  12. if(res.data.code === 0){
  13. local.set("token", res.data.token); //存储token
  14. local.set("role", res.data.role); //存储role
  15. this.$router.push("/index"); //成功后跳转页面
  16. }
  17. }
  18. });
  19. },
  20. }
  21. }
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号