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);
  }
}

六、效果

 

posted @ 2020-03-17 21:57  徐林俊  阅读(1122)  评论(0编辑  收藏  举报