美文网首页
vue axios 封装 cv 即可使用

vue axios 封装 cv 即可使用

作者: 一叶孤舟1990 | 来源:发表于2022-02-17 09:35 被阅读0次

    1,在src中新建 request 文件夹,文件夹中包含 api.js  和 http.js

    api.js 中的代码如下:

    import { get, post } from './http'

    export const login = p => post('/jeecg-boot/app/login/loginByPwd', p);//账号密码登录

    export const insertChatRecord = (params)=>post("/lz/lzLawyer/insertChatRecord",params);//保存到后台信息

    export const getChatRecord = (params)=>post("/lz/lzLawyer/getChatRecord",params);//获取聊天信息

    export const queryLawyer = (params)=>post("/app/arrange/queryLawyer",params);//获取律师的信息

    export const getDictByCode = p => get('/jeecg-boot/app/dict/getDictByCode', p); //获取App字典

    http.js 中的代码如下:

    /*

        需要注意的是:

        1,我这token是存在本地存储中的,可根据实际情况修改

        2,错误提示用的是element中的消息提示,可根据实际情况进行修改)

    */

    /**axios封装

    * 请求拦截、相应拦截、错误统一处理

    */

    import Vue from 'vue'

    import axios from 'axios';

    import QS from 'qs';

    axios.defaults.baseURL = Vue.prototype.GLOBAL.ssoServer;

    // 请求超时时间

    axios.defaults.timeout = 10000;

    // post请求头

    axios.defaults.headers.post['Content-Type'] = 'application/json';

    // 请求拦截器

    axios.interceptors.request.use(

    config => {

      // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了

      // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断

      const token = localStorage.getItem('token') ; 

      token && (config.headers.Authorization = token); 

      return config;

    },

    error => { 

      return Promise.error(error);

    })

    // 响应拦截器

    axios.interceptors.response.use(

    response => { 

      if (response.status === 200) { 

      return Promise.resolve(response); 

      } else { 

      return Promise.reject(response); 

      }

    },

    // 服务器状态码不是200的情况

    error => { 

      if (error.response.status) { 

      switch (error.response.status) {   

        // 401: 未登录   

        // 未登录则跳转登录页面,并携带当前页面的路径   

        // 在登录成功后返回当前页面,这一步需要在登录页操作。   

        case 401:   

        router.replace({     

          path: '/login',     

          query: { redirect: router.currentRoute.fullPath }

        });

        break;

        // 403 token过期   

        // 登录过期对用户进行提示   

        // 清除本地token和清空vuex中token对象   

        // 跳转登录页面   

        case 403:     

        this.$message({     

          message: '登录过期,请重新登录',     

          duration: 1000

        });

        // 清除token   

        localStorage.removeItem('token');       

        // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面

        setTimeout(() => {     

          router.replace({     

          path: '/login',     

          query: {

            redirect: router.currentRoute.fullPath

          }     

          });   

        }, 1000);   

        break;

        // 404请求不存在   

        case 404:   

        this.$message({     

          message: '网络请求不存在',     

          duration: 1500

        });   

        break;   

        // 其他错误,直接抛出错误提示   

        default:   

        this.$message({     

          message: error.response.data.message,     

          duration: 1500,     

        }); 

      } 

      return Promise.reject(error.response); 

      } 

    }

    );

    /**

    * get方法,对应get请求

    * @param {String} url [请求的url地址]

    * @param {Object} params [请求时携带的参数]

    */

    export function get(url, params){

    return new Promise((resolve, reject) =>{ 

      axios.get(url, { 

      params: params 

      }) 

      .then(res => { 

      resolve(res.data); 

      }) 

      .catch(err => { 

      reject(err.data) 

      })

    });

    }

    /**

    * post方法,对应post请求

    * @param {String} url [请求的url地址]

    * @param {Object} params [请求时携带的参数]

    */

    export function post(url, params) {

    return new Promise((resolve, reject) => { 

      // axios.post(url, QS.stringify(params)) 

      axios.post(url, params) 

      .then(res => { 

      resolve(res.data); 

      }) 

      .catch(err => { 

      reject(err.data) 

      })

    });

    }

    3,在页面中的使用说明:

    import { login,getDictByCode } from '@/request/api';// 导入我们的api接口

    post请求:

         let data = {

            "mobile":this.phoneno,

            "password": this.phonePassword,

            "type": "1"

          }

          login(data).then(res => {

         // 获取数据成功后的其他操作

            console.log(res)

          })

    get请求:

         let data = {

            'dictCode':'specialty'

          }

          getDictByCode(data).then(res => {

            console.log(res)

            // 获取数据成功后的其他操作

          })

    相关文章

      网友评论

          本文标题:vue axios 封装 cv 即可使用

          本文链接:https://www.haomeiwen.com/subject/scijlrtx.html