axios 请求拦截并在 token 过期后自动续订后重调当前请求

import cacheHelper from '../helper/cacheHelper';
import axios from "axios";
import env from "../http/env";
import { Loading } from 'element-ui';
import { WindowsToaster } from "node-notifier";
let loading;
const service = axios.create({
  baseURL: env.dev.baseUrl,
  settimeout: 3000,
});

const request = function () {
  var parameters = [];
  var exp = [];
  for (var i = 0; i < arguments.length; i++) {
    parameters.push(arguments[i]);
    exp.push("parameters[" + i + "]");
  }
  var exp = "service(" + exp.join(",") + ")";
  var promise = eval(exp);
  promise.realThen = promise.then;  //拦截then方法
  promise.requestParameters = parameters;
  promise.requestExpression = exp;
  promise.then = function (arg) {
    return new Promise(resolve => {
      promise.realThen(result => {
        if (result.code != 401) {
          promise.realThen(arg);
          return;
        }
        axios.get(env.dev.baseUrl + "/authorize/webLogin")
          .then(function (response) {
            if (response.data.code == "0") {

              console.log("auto login");

              cacheHelper.setToken(response.data.data.token);

              setTimeout(function () {
                cacheHelper.getBasicInfo();
              }, 1);

              var parameters = promise.requestParameters;
              var exp = promise.requestExpression;
              eval(exp).then(arg);  //重调then方法
            }
          });
      });
    });
  };
  return promise;
}

export default request;
桂棹兮兰桨,击空明兮溯流光。
原文地址:https://www.cnblogs.com/nanfei/p/15541191.html