基于axios封装一个请求函数

75 阅读1分钟
  1. 请求方式:对应 HTTP 请求中的 GET、POST 等方法;
  2. 请求路径:对应请求的 API 地址;
  3. 请求参数:请求携带的参数,包括 query 参数和 body 参数;
  4. 请求头:一些请求需要携带特殊的请求头,如 token 等;
  5. 请求拦截器:在发起请求前对一些参数或请求方式进行处理;
  6. 响应拦截器:对服务器返回的数据进行处理;
  7. 异常处理:对请求过程中可能发生的异常进行处理,如网络不可用、超时等等;
  8. 取消请求:在需要取消请求时提供相应方法。

基于以上方面,我们可以封装一个通用的请求函数。示例代码如下:

import axios from 'axios';
  const request = axios.create({ 
  baseURL: 'https://api.example.com', // 使用自己项目的 API 地址 
  timeout: 5000, // 超时时间 
});

request.interceptors.request.use( 
  config => { 
    // 发出请求前的处理 
    return config; 
  }, 
  error => { 
    // 请求出错时的处理 
    return Promise.reject(error); 
  } 
);

request.interceptors.response.use( 
  response => { 
    // 请求响应后的处理 
    const { data, status } = response; 
    if (status === 200) { 
      return data; 
    } else { 
      return Promise.reject(response);
    }
    
  }, error => { 
    // 请求失败时的处理 
    return Promise.reject(error); 
  }
);

export default function req({ method = 'get', url, params = {}, headers = {}, cancelToken = undefined }) { return new Promise((resolve, reject) => { request({ method, url, params, headers, cancelToken, }) .then(response => { resolve(response); }) .catch(error => { reject(error); }); }); }