vue axiosパッケージリクエストブロック

4245 ワード

requestフォルダを作成(srcと同級)requestフォルダの下-httpを作成します.js
ログイン時にバックグラウンドから戻るtokenをセッションストアに存在させる
import axios from 'axios';
import store from "../store"
import router from "../router"

// axios.defaults.timeout = 5000;//    
axios.defaults.baseURL ='';

//---------------------------------------------------------------------------------------------------
//http request    
axios.interceptors.request.use(
  config => {
    config.headers = {
      'content-type':'application/x-www-form-urlencoded'//form data                         
     };
    if(sessionStorage.getItem('token')){     //  session
      config.headers = {
        'content-type':'application/json', //  json  
        'token':sessionStorage.getItem('token')   //        token
      }
    }
    return config;
  },
  error => {
    return Promise.reject(err);
  }
);

//http response    
axios.interceptors.response.use(
  response => {
    if(response.data.code=="SenseTime0001"){     //               
      sessionStorage.removeItem('token');         //  token
      router.push({                              //      
        path:"/login",
        querry:{redirect:router.currentRoute.fullPath}//       
      })
    }
    return response;
  },
  error => {
    if(error.response){
      switch (error.response.status){
        case 401:
          store.commit('del_token');
          router.push({
            path:"/login",
            querry:{redirect:router.currentRoute.fullPath}//       
          })
      }
    }
    return Promise.reject(error.response)
  }
)
/**
 *   post  
 * @param url    String
 * @param data   Object
 * @returns {Promise}
 */

export function post(url,data={}){
  return new Promise((resolve,reject) => {
    axios.post(url,data)
      .then(response => {
        resolve(response);
      },err => {
        reject(err)
      })
  })
}
/**
 *   get  
 * @param url        String
 * @param data        Object
 * @returns {Promise}
 */
export function fetch(url,params={}){
  return new Promise((resolve,reject) => {
    axios.get(url,{
      params:params
    })
      .then(response => {
        resolve(response.data);
      })
      .catch(err => {
        reject(err)
      })
  })
}