zoukankan      html  css  js  c++  java
  • vue项目实战:api管理和封装

    /*
     * @Description: api aixos的二次封装  request.js
     * @Version: 2.0
     * @Autor: lhl
     * @Date: 2020-07-14 16:12:35
     * @LastEditors: lhl
     * @LastEditTime: 2020-08-20 17:08:27
     */
    import Vue from 'vue';
    import axios from 'axios';
    import store from '../store/index'
    import qs from 'qs'; // axios自带模块 若报错找不到重新安装即可
    
    // 全局的 axios 默认值
    // 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';
    
    
    // 使用自定义配置新建一个 axios 实例
    const instance = axios.create({
      baseURL: 'api', // process.env.BASE_API, // api的 base_url
      timeout: 100000, // 10s 请求超时时间
      // headers: 'xx'
    })
    
    // 请求拦截器(全局)
    // Authorization-token: xxx-token
    instance.interceptors.request.use(config => {
      console.log(config, '请求拦截器')
      const token = store.state.user.token;  
      // console.log(token,'token请求拦截器')
      // const token = 'xxx-token';
      token && (config.headers['Authorization-token'] = token);
      config.withCredentials = true
      if (config.headers['Content-Type'] === 'application/json') {
        config.data = JSON.stringify(config.data)
      }
      if (config.headers['Content-Type'] === 'multipart/form-data') {
        return config
      }
      if (config.method === 'post' || config.method === 'put' || config.method === 'delete') {
        if (typeof (config.data) !== 'string') {
          config.data = qs.stringify(config.data)
        }
      }
      return config
    }, error => {
      return Promise.reject(error)
    })
    
    // 响应拦截器(全局)
    instance.interceptors.response.use(response => {
      console.log(response, '响应拦截器')
      // 把axios的data层去掉原本(res.data.xx) 直接使用数据就可以res.xx即可
      return response.data
    }, error => {
      return Promise.reject(error)
    })
    
    
    export default instance
    
    // 使用axios在调用后台接口超时或是报某个特性的错误码时,需要重新发送请求。此时用到一个第三方的库:axios-retry解决了这个问题
    
    // npm install axios-retry
    
    // import axiosRetry from 'axios-retry';
    
    // //配置axios
    // axiosRetry(axios, { 
    //     retries: 3,  //设置自动发送请求次数
    //     retryCondition: (error)=>{
    //         //true为打开自动发送请求,false为关闭自动发送请求
    //         //这里的意思是当请求方式为get时打开自动发送请求功能
    //         return (error.config.method === 'get');
    //     }
    // });
    /*
     * @Description: 所有api的入口文件 index.js 将来 main.js 引入挂载 vue原型上面 方便统一管理无需各种 import
     * @Version: 2.0
     * @Autor: lhl
     * @Date: 2020-07-20 10:18:58
     * @LastEditors: lhl
     * @LastEditTime: 2020-08-20 17:12:26
     */ 
    
    // import * as xxx from 'xxx'; 会将若干export导出的内容组合成一个对象返回;
    // import xxx from 'xxx';(export default xxx)只会导出这个默认的对象作为一个对象
    
    
    import * as user from './user'
    import * as infoList from './infoList'
    
    export default {
      user,
      infoList
    }
    // 假设调用则在组件里面 模块下面的对应的接口方法即可完成调用
    // this.$http.user.xx()
    // this.$http.infoList.xx()
    /*
     * @Description: 测试列表接口 infoList.js
     * @Version: 2.0
     * @Autor: lhl
     * @Date: 2020-08-03 15:58:10
     * @LastEditors: lhl
     * @LastEditTime: 2020-08-20 17:08:36
     */
    import instance from './request'
    import store from '../store/index'
    
    // 角色管理列表
    export function roleList (data) {
      return instance({
        url: '/systemdata/role/pageList',
        method: 'post',
        headers: { 'Content-Type': 'application/json' },
        data
      })
    }
    /*
     * @Description: 用户信息接口 user.js
     * @Version: 2.0
     * @Autor: lhl
     * @Date: 2020-08-03 15:35:51
     * @LastEditors: lhl
     * @LastEditTime: 2020-08-20 17:11:13
     */
    import instance from './request'
    import store from '../store/index'
    
    // responseType: 'blob', 如果返回的格式是流文件需要加上相应类型
    
    // get请求  
    // export function getLoawList(params) {
    //   return request({
    //     url: '/system/lowlist',
    //     method: 'get',
    //     params: params
    //   })
    // }
    
    // 获取用户信息
    export function userInfo(data) {
        return instance({
            url: '/user/userInfo/getByLoginUser',
            method: 'post',
            headers: { 'Content-Type': 'application/json' },
            data
        })
    }
    
    // 获取页面按钮权限
    export function btnList (data) {
      return instance({
        url: '/system/menu/getCurrUserButton',
        method: 'post',
        headers: { 'Content-Type': 'application/json' },
        data
      })
    }

      以上代码本人项目实测!!!真实可靠,请勿随意转载~转载请注明出处~~~谢谢合作!

  • 相关阅读:
    iOS开发>学无止境
    iOS开发>学无止境
    iOS开发>学无止境
    Objective-C学习—UITableView的使用
    iOS开发>学无止境
    iOS开发—AFNetworking的使用
    iOS开发>学无止境
    c#笔记(六)——数组(2)
    c#笔记(六)——数组
    c#笔记(五)——循环结构
  • 原文地址:https://www.cnblogs.com/lhl66/p/13536225.html
Copyright © 2011-2022 走看看