// common/request.js
// 目前没有针对uni的Fly版本,使用wx版本没有问题
import store from '@/store'
import config from './config.js'
import Base64 from './base64.js'
// H5版本
// #ifdef H5
import Fly from "flyio/dist/npm/fly"
// #endif
//微信小程序和APP版本
// #ifndef H5
import Fly from "flyio/dist/npm/wx"
// #endif
const request = new Fly();
let base64 = new Base64()
request.interceptors.request.use((request) => {
request.baseURL = config.baseURL;
const token = store.state.user.token;
request.headers['Authorization'] = `Basic ${base64.encode(`${config.clientId}:${config.clientSecret}`)}`;
if (token) {
request.headers['Blade-Auth'] = 'bearer ' + token // 让每个请求携带token--['Authorization']为自定义key 请根据实际情况自行修改
} else {
request.headers['Tenant-Id'] = config.tenantId
}
if (request.method === 'POST' && request.headers['Content-Type'] !== 'multipart/form-data') {
request.body = {
...request.body,
_t: Date.parse(new Date()) / 1000
}
} else if (request.method === 'GET') {
request.params = {
_t: Date.parse(new Date()) / 1000,
...request.params
}
}
uni.showLoading({
title: '正在努力加载中...'
});
return request
})
request.interceptors.response.use(function(response) { //不要使用箭头函数,否则调用this.lock()时,this指向不对
uni.hideLoading();
let errmsg = '';
const data = response.data;
if (!data || typeof data !== 'object') {
errmsg = '服务器响应格式错误';
uni.showToast({
title: errmsg,
icon: 'none'
})
} else {
const errno = data.errno;
switch (errno) {
case 1001:
// 数据检验未通过
for (let i in data.data) {
errmsg += data.data[i] + ';'
}
break;
default:
errmsg = data.errmsg;
break
}
if (errmsg && errno !== 0) {
uni.showToast({
title: errmsg,
icon: 'none'
})
}
if (errmsg !== '' && errno === 0) {
uni.showToast({
title: errmsg,
icon: 'none'
})
}
}
return response.data; //只返回业务数据部分
}, function(err) {
// console.log("error-interceptor:" + JSON.stringify(err))
uni.hideLoading();
let errmsg = err.message;
switch (err.status) {
case 0:
errmsg = "网络连接错误";
uni.showToast({
title: errmsg,
icon: 'none'
})
break;
case 400:
uni.showToast({
title: err.response.data.msg,
icon: 'none'
})
break;
case 401:
let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
let curRoute = routes[routes.length - 1].route // 获取当前页面路由,也就是最后一个打开的页面路由
if(curRoute.indexOf('registerLogin') != -1){
return
}
uni.showModal({
title: '提示',
content: '当前登录已过期,是否重新登录',
cancelText: '退出系统',
confirmText: '重新登录',
success: (res) => {
if (res.confirm) {
store.dispatch('refreshToken').then((res) => {
console.log(res)
if (res.access_token) {
setTimeout(() => {
uni.switchTab({
url:'/pages/tabbar/home/home'
})
})
} else {
store.dispatch('LogOut');
uni.reLaunch({
url: '/pages/public/registerLogin/registerLogin'
})
}
})
} else if (res.cancel) {
store.dispatch('LogOut');
plus.runtime.quit();
}
}
});
break;
default:
uni.showToast({
title: errmsg,
icon: 'none'
})
}
})
export default request
export {
request
}
uni拦截器
最新推荐文章于 2024-05-05 10:14:54 发布