• vue 中使用 axios 封装及使用


    一, 配置BaseUrl

    /**
     * {
     *   dev: '开发环境配置信息',
     *   test: '测试环境配置信息',
     *   prod: '线上环境配置信息'
     * }
     */
    function conf (base = {}) {
      if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'testing') { // 生产环境下
        let env = process.env.ENV_CONFIG || 'dev'
        return base[env] || base['dev']
      }
      // 开发环境
      return base['dev']
    }
    
    // baseUrl
    export const baseUrl = conf({
      dev: 'http://`````',
      test: 'http://`````',
      prod: 'http://`````'
    })
    

    二, 配置axios , 创建axios.js

    import axios from 'axios'
    import {baseUrl} from './env'
    
    var axiosBaseUrl = ''
    export default async (url = '', data = {}, type = 'GET', headers = {}) => {
    
      type = type.toLowerCase()
      switch (type) {
        case 'post':
          return axios.post(baseUrl+ url, data, headers)
            .then((res) => { 
              return res
            })
            .catch((error) => {
              return error
            })
        case 'put':
          return axios.put(baseUrl+ url, data)
            .then((res) => {
              return res
            })
            .catch((error) => {
              return error
            })
        default:
          return axios({
            method: type,
            baseUrl: baseUrl,
            url: url,
            data: data,
            timeout: 10000,
            headers: {
              'X-Requested-With': 'XMLHttpRequest',
              // 'X-Frame-Options': 'DENY', // 告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。
              'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
            }
          }).then((res) => {
            return res
          }).catch((error) => {
            return error
          })
      }
    }
    

    三, 配置拦截器 interceptors.js

    /**
     *
     * @title 拦截器
     * @Description 与后台接口对接前后做处理用的
     * @Author 申
     * @Date 2020-03-19
     * @Version 1.0
     */
    import Vue from 'vue'
    import {
        MessageBox
    } from 'element-ui'
    import store from '@/store'
    import axios from 'axios'
    import QS from 'qs'
    import {
        getStore
    } from '@/utils/index'
    var _bus = new Vue()
    // 添加请求拦截器
    let num = 0;
    axios.interceptors.request.use(function (config) {
        //url == queryPayState 不显示loading
        if (config.url.indexOf('queryPayState') == -1) {
            num++
            // 打开加载框
            _bus.$emit('showloading')
        }
    
        config.data = QS.stringify(config.data)
      
      
      //header 中添加token let store = JSON.parse(getStore('store')) if (store && store.token) config.headers.token = store.token if (config.type === 'formData' || config.method !== 'post') { return config } return config }, function (error) { return Promise.reject(error) }) // 添加响应拦截器 axios.interceptors.response.use(function (response) { if (response.config.url.indexOf('queryPayState') == -1) { num-- if (num <= 0) { //关闭加载框 _bus.$emit('closeloading') } else { _bus.$emit('showloading') } } if (response.data.msgCode) { // 处理返回异常信息 if (response.data.msgCode === '10003') { store.commit('SET_TOKEN', '') if (num <= 0) { MessageBox.alert('登录信息超时, 请重新登录!', '登录超时', { confirmButtonText: '打开登录页面', callback: action => { // window.location.href = "/#/?islogin=false" // window.history.back(); store.commit('SET_isloginModel', true) } }) } } if (response.data.msgCode !== '0') { // MessageBox.alert(response.data.msg, '提示') } } return response.data }, function (error) { // 关闭loading _bus.$emit('showloading') return Promise.reject(error) }) export var bus = _bus

      四, 使用api.js

    import http from './axios'
    /**
     *  登录
     */
    export const login = data => http('/weblogin/accountLogin.do', data, 'post')
    
    //获取赛历
    export const queryMatchCalendar = () => http('/matchInfo/queryMatchCalendar.do', {}, 'post')
    

      五,在页面中使用 index.vue

    <template>
        <div>
            <Header></Header>
            <div class="container">
            </div>
            <Footer></Footer>
        </div>
    </template>
    
    <script>
        import { fileDownload } from '@/api/api'
        export default {
            data() {
                return {
                    fileList: []
                }
            },
            mounted() {
                this.fileDownload()
            },
            methods: {
                async fileDownload() {
                    const res = await fileDownload()
                    if(res.msgCode === '0') {
                        this.fileList = res.data.dataList
                    }else{
                        // 异常处理
                    }
                }
            }
        }
    </script>    
    

      

  • 相关阅读:
    QT 手式编译步骤
    Linux QT 连接 Sqlite数据库
    JDK_1.8的Windows和Linux环境下的下载与安装
    聚焦BPM弹窗
    SQL查重去重
    sql函数使用
    SQL游标
    转载:《TypeScript 中文入门教程》 2、枚举
    《TypeScript 中文入门教程》 1、基础数据类型
    转载:《TypeScript 中文入门教程》
  • 原文地址:https://www.cnblogs.com/shenjilin/p/13448038.html
Copyright © 2020-2023  润新知