zoukankan      html  css  js  c++  java
  • vue项目中axios请求网络接口封装

    一、安装axios

    npm install axios

    二、封装方法

    在src目录下新建utls文件夹,并在该文件夹建如下文件:

    1、url.js

    统一放置接口

    // 获取省市
    let area = 'GetRegionList';
    module.exports = {
        area
    }

    2、http.js

    引入axios、mint-ui、并封装get请求、post请求方法

    import axios from 'axios';
    import {MessageBox, Toast, Indicator} from 'mint-ui';
    axios.defaults.timeout = 50000//默认请求超时时间
    axios.defaults.baseURL = "/api";
    axios.defaults.headers.common["Authorization"] = 'toke信息'
    
    // get
    export function getHttp (url, params = {}) {
        return new Promise((resolve, reject) => {
          axios.get(url, data)
            .then(response => {
              resolve(response.data)
              Indicator.close() // // 关闭动画
            })
            .catch(err => {
              reject(err)
              Indicator.close() // // 关闭动画
              MessageBox.alert('message', err)
            })
        })
      }
    
    
      // post
      export function postHttp (url, data = {}) {
        Indicator.open({
          text: '加载中...',
          spinnerType: 'fading-circle'
        })
        return new Promise((resolve, reject) => {
          axios.post(url, data)
            .then(response => {
              if (response.status == 200) {
                resolve(response.data)
                Indicator.close();   // 关闭动画
              } else {
                Toast(response.data.msg)
              }
            }, (err) => {
              reject(err)
              Indicator.close() // // 关闭动画
            })
        })
    }

    三、配置main.js

    import Vue from "vue";
    import App from "./App.vue";
    import router from "./router";
    import store from "./store";
    
    import {getHttp, postHttp} from './utils/http'
    Vue.prototype.$getHttp = getHttp
    Vue.prototype.$postHttp = postHttp
    
    // mint-ui
    import Mint from 'mint-ui';
    Vue.use(Mint);
    import 'mint-ui/lib/style.css'; 
    
    
    Vue.config.productionTip = false;
    
    router.beforeEach((to, from, next) => {
      /* 路由发生变化修改页面title */
      if (to.meta.title) {
        document.title = to.meta.title
      }
      next()
    })
    
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount("#app");

    四、配置本地请求代理

    在根目录下新建vue.config.js,做如下配置

    module.exports = {
        publicPath:'./',
        configureWebpack:{
            resolve: {
                alias: {
                  'assets': '@/assets',
                  'common': '@/common',
                  'components': '@/components',
                  'network': '@/network',
                  'views': '@/views',
                  'plugins': '@/plugins',
                }
              }
        },
        devServer: {
            /* 自动打开浏览器 */
            open: true,
            /* 设置为0.0.0.0则所有的地址均能访问 */
            host: '0.0.0.0',
            port: 8066,
            https: false,
            hotOnly: false,
            /* 使用代理 */
            proxy: {
                '/api': {
                    /* 目标代理服务器地址 */
                    target: 'https://www.baidu.com/',   
                    /* 允许跨域 */
                    changeOrigin: true,
                },
            },
        }
    }

    五、页面使用

    async getArea(){   // 获取省市数据
      let res = await this.$postHttp(urls.area);
      if(res.Success){
          console.log('我是省市数据', res.Result);
      }else{
        Toast.fail(res.Message);
      }
    }

    六、效果

  • 相关阅读:
    一个优秀的博主 有助于前端进阶
    JS异步的理解以及promise
    node-sass出错
    vuecli脚手架搭建
    GitHub上传项目方法
    ES6转ES5
    webpack---安装与卸载
    CSS之BFC详解
    Vue.js学习 --环境搭建
    python is和==的区别
  • 原文地址:https://www.cnblogs.com/xulinjun/p/12513808.html
Copyright © 2011-2022 走看看