vue中使用axios的request封装使用


封装部分

/*
 * @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的时候需要设置
  });
}

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM