Ts封装axios

Ts封装axios

首先我们先了解什么是axios?

axios是什么?

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

axios特性

  • 从浏览器创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 超时处理
  • 查询参数序列化支持嵌套项处理
  • 将 HTML Form 转换成 JSON 进行请求
  • 自动转换JSON数据
  • 获取浏览器和 node.js 的请求进度,并提供额外的信息(速度、剩余时间)
  • 为 node.js 设置带宽限制
  • 兼容符合规范的 FormData 和 Blob(包括 node.js)
  • 客户端支持防御XSRF

在封装之前

先下载axios包

npm i axios

拦截器封装

// axios的封装主要是配置拦截器
import axios from 'axios'
// 配置基准地址
axios.defaults.baseURL = ''
// 从官网将拦截器配置进来
// 添加请求拦截器
// 请求拦截器的执行时机:每次发送请求时,但请求还没发送出去时会先执行这个拦截器
axios.interceptors.request.use(function (config) {
    // 这个函数是请求发送的动作是成功的,会执行
    // 一般会请求拦截里面加token,用于后端的验证
      const token = localStorage.getItem("token") as string
      if(token) {
        config.headers!.Authorization = token;
      }
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 发送请求的动作有错误,会执行,通常是4开头的错误
    // 对请求错误做些什么,可以处理4开头的错误
    return Promise.reject(error);
});

// 添加响应拦截器
// 响应拦截器是在请求结束,服务器有响应的时候会执行
axios.interceptors.response.use(function (response) {
    // 响应成功,状态码是2开头的时候会执行
    // 2xx 范围内的状态码都会触发该函数。
     // 这里用来处理http常见错误,进行全局提示
      let message = "";
      switch (err.response.status) {
        case 400:
          message = "请求错误(400)";
          break;
        case 401:
          message = "未授权,请重新登录(401)";
          // 这里可以做清空storage并跳转到登录页的操作
          break;
        case 403:
          message = "拒绝访问(403)";
          break;
        case 404:
          message = "请求出错(404)";
          break;
        case 408:
          message = "请求超时(408)";
          break;
        case 500:
          message = "服务器错误(500)";
          break;
        case 501:
          message = "服务未实现(501)";
          break;
        case 502:
          message = "网络错误(502)";
          break;
        case 503:
          message = "服务不可用(503)";
          break;
        case 504:
          message = "网络超时(504)";
          break;
        case 505:
          message = "HTTP版本不受支持(505)";
          break;
        default:
          message = `连接出错(${err.response.status})!`;
      }
    // 对响应数据做点什么
    return response;
}, function (error) {
    // 状态码是5开头的时候,会在这里执行
    
    // 对响应错误做点什么
    return Promise.reject(error);
});

// 导出配置好的axios
export default axios

在这里我们分别对请求拦截器和响应拦截器做了处理。
在请求拦截器我们给请求头添加了token。
在响应拦截器,我们返回了整个response对象,当然你也可以只返回后端返回的response.data,这里可以根据个人喜好来处理。其次对http错误进行了全局处理。

详细内容请查看axios官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值