vueにおけるaxiosのパッケージ

11785 ワード

import axios from 'axios'
import qs from 'qs'
import Vue from 'vue'
var vm=new Vue()
import Element from 'element-ui'
var ports=window.sessionStorage.ports;
axios.interceptors.request.use(config => {
    return config
}, resor => {
    return Promise.reject(resor)
})
axios.interceptors.response.use(response => {
    return response
}, resor => {
    return Promise.resolve(resor.response)
})
function checkStatus (response) {
    //   http     ,       
    if (response && (response.status === 200 || response.status === 304)) {
        return response.data
        //        data     ,     return response.data
    }else if(response &&response.status === 400 ){
        return {
            status: 400,
            message: '     ',
            result:false
        }
    }
    //
    return {
        status: -404,
        message: '    ',
        result:false
    }
}
export default {
    post (url,data) {
        return axios({
        method: 'post',
        baseURL: ports,
        url,
        data: qs.stringify(data),
        timeout: 10000,
        }).then(
            (response) => {
                return checkStatus(response)
            }
        ).then((res)=>{
            if(res.result){
                return Promise.resolve(res.model)
            }else{
                // vm.$alert(res.message,'    ')
                return Promise.reject(res)
            }
        })
    },
    postJson (url,data) {
      return axios({
        method: 'post',
        baseURL: ports,
        url,
        data: data,
        headers:{
          'Content-Type':'application/json; charset=utf-8'
        },
        timeout: 10000,
      }).then(
        (response) => {
          return checkStatus(response)
        }
      ).then((res)=>{
        if(res.result){
          return Promise.resolve(res.model)
        }else{
            // vm.$alert(res.message,'    ')
            return Promise.reject(res)
        }
      })
    },
    postFormData (url,data) {
        return axios({
        method: 'post',
        baseURL: ports,
        url,
        data: qs.stringify(data),
        timeout: 10000,
        headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
        }
        }).then(
            (response) => {
                return checkStatus(response)
            }
        ).then((res)=>{
            if(res.result){
                return Promise.resolve(res.model)
            }else{
                // vm.$alert(res.message,'    ')
                return Promise.reject(res)
            }
        })
    },
    get (url,params) {
        return axios({
        method: 'get',
        baseURL: ports,
        url,
        params, // get        
        timeout: 10000,
        }).then(
            (response) => {
                return checkStatus(response)
            }
        ).then((res)=>{
            if(res.result){
                return Promise.resolve(res.model)
            }else{
                // vm.$alert(res.message,'    ')
                return Promise.reject(res)
            }
        }) 
    }
}

 
もう1つのパッケージ方法:
import axios from 'axios'
axios.defaults.timeout = 10000
axios.defaults.headers.post['Content-Type'] = 'application/x-www=form-urlencoded'
let port = '';
//    
export default{
  fetchGet (url, params) {
    params = params?this.setParams(params):{};
    return new Promise((resolve, reject) => {
      axios.get(this.getPocPort() + url, {params}).then(res => {
        resolve(res.data)
      }).catch(error => {
        reject(error)
      })
    })
  },
  fetchQuickSearch (url) {
    return new Promise((resolve, reject) => {
      axios.get(this.getPocPort() + url).then(res => {
        resolve(res.data)
      }).catch(error => {
        reject(error)
      })
    })
  },
  fetchPost (url, params) {
    params = params?this.setParams(params):{};
    return new Promise((resolve, reject) => {
      axios.post(this.getPocPort() + url, params).then(res => {
        resolve(res.data)
      }).catch(error => {
        reject(error)
      })
    })
  },
  fetchPostJson(url, params) {
    return new Promise((resolve, reject) => {
      axios.post(this.getPocPort() + url, params).then(res => {
        resolve(res.data)
      }).catch(error => {
        reject(error)
      })
    })
  },
  setParams(params){
    let fdata = new URLSearchParams();
          for(let attr in params){
              fdata.append(attr,params[attr]);
          }
      return fdata;    
  },
  getPocPort(){
    if(!port){
       port = localStorage.getItem('pocPort');
    }
    return port;
  }
}

jsでの導入方法:
import http from './public'
const port = '';
//     
export const page = (params) => {
  return http.fetchPost(port + '/channel/channelPage', params)
}

 
転載先:https://www.cnblogs.com/xuemei/p/10087338.html