Skip to content
导航目录

接口请求

接口请求

1. 参数签名

  • 对请求参数进行签名加密,签名算法如下
ts
/**
 * 数据签名
 * @param {*} obj
 */
export function getSignature(obj:any) {
    let encrypt = {};
    if (obj) {
      encrypt = obj
    }
    // 签名
    const signature = getEncrypt(encrypt, '21232f297a57a5a743894a0e4a801fc')
    encrypt.signature = signature
    return encrypt
  }

2. 请求拦截器

  • 在发送请求之前,注入x-access-appidx-access-token'signature参数
ts
// 添加请求拦截器
service.interceptors.request.use(
	(config) => {
		// 在发送请求之前
		config.headers['x-access-appid'] = 'admin'
		if (Session.get('token')) {
			config.headers!['x-access-token'] = `${Session.get('token')}`;
		}
		// signature
		if (config.method === 'post') {
			config.data = getSignature(config.data)
		} else if (config.method === 'get') {
			config.params = getSignature(config.params)
		}
		return config;
	},
	(error) => {
		// 对请求错误做些什么
		return Promise.reject(error);
	}
);

3. 响应拦截器

  • 对响应结果进行处理,token过期,请求异常等
ts
// 添加响应拦截器
service.interceptors.response.use(
	(response) => {
		// 对响应数据做点什么
		const res = response.data;
		// 业务逻辑错误
		if (res.status !== 1) {
			// token 过期了
			if (res.code === 11102 || res.code === 11103) {
				// to re-login
				Session.clear(); // 清除浏览器全部临时缓存
				window.location.href = '/'; // 去登录页
				ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
					.then(() => {})
					.catch(() => {});
			} else if(res.msg){
				ElMessage.error(res.msg)
			}
			return Promise.reject(service.interceptors.response);
		} else {
			return response.data;
		}
	},
	(error) => {
		// 对响应错误做点什么
		if (error.message.indexOf('timeout') != -1) {
			ElMessage.error('网络超时');
		} else if (error.message == 'Network Error') {
			ElMessage.error('网络连接错误');
		} else {
			if (error) {
				console.log(error.response)
				//ElMessage.error(error.response.msg);
			}else{
				ElMessage.error('接口路径找不到');
			}
		}
		return Promise.reject(error);
	}
);

欢迎使用HardAdmin