封裝部分
/* * @Description: * @Author: Jenny * @Date: 2021-01-13 */ import axios from "axios"; import { UserModule } from "@/store/modules/user"; import { ResCode } from "@/utils/constants.ts"; //ResCode常量自定義 export enum ResCode { // NO_AUTH = 2003,} class Request { public instance: any; constructor() { // 創建axios實例 this.instance = axios.create({ timeout: 1200000, baseURL: window["config"]["baseUrl"], //后端服務器地址 }); // 初始化攔截器 this.initInterceptors(); } // 為了讓http.ts中獲取初始化好的axios實例 public getInterceptors() { return this.instance; } // 初始化攔截器 public initInterceptors() { //請求攔截器 this.instance.interceptors.request.use( (config) => { config.headers["user-token"] = UserModule.token; //自定義請求頭,從store里取 return config; }, (error) => { return Promise.reject(error); } ); // 響應攔截器 this.instance.interceptors.response.use( // 請求成功 async (res) => { if (res.status === 200) { const code = res.data.code; if (code && code === ResCode.NO_AUTH) { setTimeout(() => { UserModule.ResetToken(); //重置token UserModule.toSSOLogin(); //去登錄 }, 100); return Promise.reject(res.data); } // 針對blob的異常信息處理 if ( res.request.responseType == "blob" && res.data["type"] == "application/json" ) { res.data = await this.handleBlob(res.data); } } else { GlobalMessage.error(res.data.mesg); //提示 } return Promise.resolve(res.data); }, // 請求失敗 (error) => { GlobalMessage.error("網絡連接異常,請稍后再試!"); //提示 return Promise.reject(error); } ); } // 針對blob錯誤信息的處理 public handleBlob(result) { return new Promise((resolve) => { const reader = new FileReader(); reader.readAsText(result, "utf-8"); reader.onload = () => { const data = JSON.parse(reader.result as string); resolve(data); }; }); } } const request = new Request().getInterceptors(); export default request;
使用方法
import request from "../utils/request"; //考試列表查詢(當前/過往) post export function queryExamList(data: object) { return request({ url: `/exam/list/query`, method: "post", data, }); } //獲取二維碼圖片(步驟1) export function getQrImg(params: object) { return request({ url: `/scanCode/getQrImg`, method: "get", params, responseType: "blob", //返回值的類型是blob的時候需要設置 }); }