• Ajax
  • Ant design
  • Axios-Fetch
  • Avue
  • Browser
  • Canvas
  • CSS
  • Dos-bat
  • Dva
  • Dedecms
  • Echart
  • ElementUI
  • Editors
  • Git
  • GeoServer
  • GIS
  • H5
  • Jquery
  • Java安卓
  • Json
  • Javascript
  • Leaflet
  • Linux
  • Life-Info
  • Mock
  • MongoDB
  • Network
  • NodeJS
  • NPM
  • React
  • 设计运营
  • SEO
  • SVG
  • TypeScript
  • Tools
  • umi
  • uni-APP
  • Vant
  • Vue
  • Windows
  • webpack
  • 位置:OC中文网 > 其他 > Axios-Fetch >

    Axios超级封装(拦截请求+数据请求)代码示例

    来源:直接复制网 时间:08-13

    Axios 对于vue来说是非常非常有用的,我们做适当的封装,可以更加的节省我们的开发时间,下面代码为作者使用的很漂亮的封装,不仅可以拦截请求还可以灵活的请求数据。

    1. import axios from "axios"
    2. import { Message } from "element-ui"
    3. axios.defaults.withCredentials = true//配置允许跨域携带cookie 
    4. const HttpError = { 
    5.   400: "请求错误"
    6.   401: "未授权,请登录"
    7.   403: "拒绝访问"
    8.   404: "求地址出错"
    9.   408: "请求超时"
    10.   500: "服务器开个小差,请稍后再试"
    11.   501: "服务器开个小差,请稍后再试"
    12.   502: "服务器开个小差,请稍后再试"
    13.   503: "服务器开个小差,请稍后再试"
    14.   504: "服务器开个小差,请稍后再试"
    15.   505: "HTTP版本不受支持" 
    16. }; 
    17. axios.interceptors.request.use( 
    18.   config => { 
    19.     config.headers.common = { 
    20.       "Content-Type""application/json;charset=UTF-8"
    21.       "X-Gaia-Api-Key""888999-2912-48c3-9733-7246f2690166"
    22.       "X-ER-System-Info""default"
    23.       "Accept-Language""zh-CN"
    24.       "X-ER-User-Info""bGl1bGlmYW5n"
    25.     }; 
    26.     config.crossDomain = true;  //配置跨域状态 
    27.     config.timeout = 200000;   //配置超时时间 
    28.     return config; 
    29.   }, 
    30.   error => { 
    31.     return Promise.reject(error); 
    32.   } 
    33. ); 
    34.  
    35. // 拦截响应response,并做一些错误处理 
    36. axios.interceptors.response.use( 
    37.   res => { 
    38.     try { 
    39.       // TODO: set response pre-judge-handler 
    40.     } catch (e) { 
    41.       console.info( 
    42.         `错误名称: ${e.name}\n错误描述: ${e.message}\n错误堆栈: ${e.stack}` 
    43.       ); 
    44.     } 
    45.     return res; 
    46.   }, 
    47.  
    48.   err => { 
    49.     if (err.response.status == "401") { 
    50.       console.log(err.response); 
    51.       let url = err.response.data.loginUrl; 
    52.       let localUrl = escape(escape("#/" + location.href.split("/#/")[1])); 
    53.       window.location.href = url + localUrl; 
    54.     } 
    55.     let msg = 
    56.       err.toString().indexOf("timeout") != -1 
    57.         ? "请求超时,请稍后再试" 
    58.         : "请求错误"
    59.     err && err.response && (msg = HttpError[err.response.status]); 
    60.     return Promise.reject(err); 
    61.   } 
    62. ); 
    63. /** 
    64.  * @func axios的二次封装 
    65.  * @param method-请求方法,url-接口地址,data-请求参数 
    66.  */ 
    67. const request = (url, data = {}, method = "GET") => { 
    68.   let params; 
    69.   if (method.toUpperCase() === "GET") { 
    70.     params = "params"
    71.   } else { 
    72.     params = "data"
    73.   } 
    74.   console.log(data); 
    75.   return new Promise((resolve, reject) => { 
    76.     axios({ 
    77.       url: url, 
    78.       method: method, 
    79.       [params]: data 
    80.     }) 
    81.       .then(res => { 
    82.         resolve(res); 
    83.       }) 
    84.       .catch(e => { 
    85.         if (e.response.status == "500") { 
    86.           let response = JSON.parse(JSON.stringify(e.response)); 
    87.           let message = response.data && response.data.message; 
    88.           if (message) { 
    89.             Message.error(message); 
    90.             return false
    91.           } 
    92.         } 
    93.         reject(e); 
    94.       }); 
    95.   }); 
    96. }; 
    97.  
    98. export default request; 

    使用说明:

    1,每次请求后台数据,都要做axios拦截处理,如果未授权,则跳转到后台指定的一个URL地址。

    2,请求数据方法

    1. url为接口地址,可以拼接 
    2. XX为参数,可以为空 
    3. MM为大写的方法名称,如POST,GET,UPDATE,DELETE 

    1. this.$request(url,{XX},"MM") 
    2.       .then(res => { 
    3.         this.Data = res.data.children; 
    4.       }) 
    5.       .catch(e => { 
    6.         this.$message.error(e); 
    7.       });