换地址
This commit is contained in:
parent
126e236cc2
commit
90edc49e80
499
utils/request.js
499
utils/request.js
|
|
@ -1,78 +1,66 @@
|
||||||
import {
|
import { getToken, setToken, removeToken } from "./auth";
|
||||||
getToken,
|
import { setVersion } from "../utils/version.js";
|
||||||
setToken,
|
import { getBaseUrl } from "../utils/version.js";
|
||||||
removeToken
|
|
||||||
} from './auth'
|
|
||||||
import {
|
|
||||||
setVersion
|
|
||||||
} from '../utils/version.js'
|
|
||||||
import {
|
|
||||||
getBaseUrl
|
|
||||||
} from '../utils/version.js'
|
|
||||||
|
|
||||||
let baseURL;
|
let baseURL;
|
||||||
setVersion()
|
setVersion();
|
||||||
|
|
||||||
let isRefreshing = false
|
let isRefreshing = false;
|
||||||
let subscribers = []
|
let subscribers = [];
|
||||||
|
|
||||||
// 订阅 Token 刷新
|
// 订阅 Token 刷新
|
||||||
function subscribeTokenRefresh(cb) {
|
function subscribeTokenRefresh(cb) {
|
||||||
subscribers.push(cb)
|
subscribers.push(cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发布 Token 刷新完成
|
// 发布 Token 刷新完成
|
||||||
function onRrefreshed(token) {
|
function onRrefreshed(token) {
|
||||||
subscribers.forEach(cb => cb(token))
|
subscribers.forEach((cb) => cb(token));
|
||||||
subscribers = []
|
subscribers = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 请求拦截器
|
// 请求拦截器
|
||||||
const requestInterceptor = (options) => {
|
const requestInterceptor = (options) => {
|
||||||
// 获取token
|
// 获取token
|
||||||
const token = uni.getStorageSync('accessToken')
|
const token = uni.getStorageSync("accessToken");
|
||||||
if (token) {
|
if (token) {
|
||||||
options.header = {
|
options.header = {
|
||||||
...options.header,
|
...options.header,
|
||||||
'Authorization': `Bearer ${token}`
|
Authorization: `Bearer ${token}`,
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
// H5端跨域处理
|
// H5端跨域处理
|
||||||
options.header = {
|
options.header = {
|
||||||
...options.header,
|
...options.header,
|
||||||
'Access-Control-Allow-Origin': '*'
|
"Access-Control-Allow-Origin": "*",
|
||||||
}
|
};
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
return options
|
return options;
|
||||||
}
|
};
|
||||||
|
|
||||||
// 响应拦截器
|
// 响应拦截器
|
||||||
const responseInterceptor = async (options, response, resolve, reject) => {
|
const responseInterceptor = async (options, response, resolve, reject) => {
|
||||||
const {
|
const { statusCode, data } = response;
|
||||||
statusCode,
|
// 请求成功
|
||||||
data
|
if (statusCode >= 200 && statusCode < 300) {
|
||||||
} = response
|
return data;
|
||||||
// 请求成功
|
}
|
||||||
if (statusCode >= 200 && statusCode < 300) {
|
|
||||||
return data
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理错误
|
// 处理错误
|
||||||
if (statusCode === 401) {
|
if (statusCode === 401) {
|
||||||
|
return await handleUnauthorized(options, resolve, reject);
|
||||||
|
}
|
||||||
|
|
||||||
return await handleUnauthorized(options, resolve, reject)
|
// 其他错误
|
||||||
}
|
uni.showToast({
|
||||||
|
title: data.message || "请求失败",
|
||||||
// 其他错误
|
icon: "none",
|
||||||
uni.showToast({
|
});
|
||||||
title: data.message || '请求失败',
|
return Promise.reject(data);
|
||||||
icon: 'none'
|
};
|
||||||
})
|
|
||||||
return Promise.reject(data)
|
|
||||||
}
|
|
||||||
// 创建 uni.request 的封装
|
// 创建 uni.request 的封装
|
||||||
// const request = (options) => {
|
// const request = (options) => {
|
||||||
// return new Promise((resolve, reject) => {
|
// return new Promise((resolve, reject) => {
|
||||||
|
|
@ -95,239 +83,234 @@ const responseInterceptor = async (options, response, resolve, reject) => {
|
||||||
|
|
||||||
// 请求方法
|
// 请求方法
|
||||||
const request = async (options, isUpdate) => {
|
const request = async (options, isUpdate) => {
|
||||||
// 合并配置
|
// 合并配置
|
||||||
let url = uni.getStorageSync('baseUrl')
|
let url = uni.getStorageSync("baseUrl");
|
||||||
if (uni.getStorageSync('setVersion').VersionCode == '') {
|
if (uni.getStorageSync("setVersion").VersionCode == "") {
|
||||||
setVersion()
|
setVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!url) {
|
if (!url) {
|
||||||
await new Promise((resolve, reject) => {
|
await new Promise((resolve, reject) => {
|
||||||
uni.request({
|
uni.request({
|
||||||
url: 'https://api.mrrwlkj.top/api/openPuc/getSjApiUrl', // 接口地址
|
url: "https://api.mrrwlkj.top/api/openPuc/getSjApiUrl", // 接口地址
|
||||||
method: 'GET', // 请求方法(默认 GET)
|
method: "GET", // 请求方法(默认 GET)
|
||||||
header: {
|
header: {
|
||||||
'Content-Type': 'application/json', // 请求头
|
"Content-Type": "application/json", // 请求头
|
||||||
'VersionCode': uni.getStorageSync('setVersion').VersionCode,
|
VersionCode: uni.getStorageSync("setVersion").VersionCode,
|
||||||
'DeviceBrand': uni.getStorageSync('setVersion').DeviceBrand,
|
DeviceBrand: uni.getStorageSync("setVersion").DeviceBrand,
|
||||||
'DeviceType': uni.getStorageSync('setVersion').DeviceType
|
DeviceType: uni.getStorageSync("setVersion").DeviceType,
|
||||||
},
|
},
|
||||||
success: (res) => {
|
success: (res) => {
|
||||||
if (res.data.code == 200) {
|
if (res.data.code == 200) {
|
||||||
uni.setStorageSync('baseUrl', res.data.data.url)
|
uni.setStorageSync("baseUrl", res.data.data.url);
|
||||||
url = res.data.data.url
|
url = res.data.data.url;
|
||||||
resolve(url)
|
resolve(url);
|
||||||
}
|
}
|
||||||
console.log('请求成功', res.data);
|
console.log("请求成功", res.data);
|
||||||
},
|
},
|
||||||
fail: (err) => {
|
fail: (err) => {
|
||||||
console.log('请求失败', err);
|
console.log("请求失败", err);
|
||||||
},
|
},
|
||||||
complete: () => {
|
complete: () => {
|
||||||
console.log('请求完成(无论成功失败都会执行)');
|
console.log("请求完成(无论成功失败都会执行)");
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
if (process.env.NODE_ENV === "development") {
|
||||||
|
baseURL = url; // 发布到生产环境时,此处代码会被摇树移除掉。
|
||||||
|
baseURL = "http://116.63.163.121:93"; // 发布到生产环境时,此处代码会被摇树移除掉。
|
||||||
|
//baseURL = 'http://60.247.146.5:96'; // 发布到生产环境时,此处代码会被摇树移除掉。
|
||||||
|
//baseURL = 'https://app.mrrweb.com.cn';
|
||||||
|
} else {
|
||||||
|
baseURL = url; // 发布到生产环境时,此处代码会被摇树移除掉。
|
||||||
|
baseURL = "http://116.63.163.121:93"; // 发布到生产环境时,此处代码会被摇树移除掉。
|
||||||
|
//baseURL = 'http://60.247.146.5:96'; // 发布到生产环境时,此处代码会被摇树移除掉。
|
||||||
|
//baseURL = 'https://app.mrrweb.com.cn';
|
||||||
|
|
||||||
|
console.log("生产环境");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 基础配置
|
||||||
|
const config = {
|
||||||
|
baseURL: baseURL, // APP和H5的开发URL
|
||||||
|
baseURL: baseURL, // APP和H5的开发URL
|
||||||
|
// baseURL: 'https://app.mrrweb.com.cn', // APP和H5的生产URL
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') {
|
header: {
|
||||||
baseURL = url; // 发布到生产环境时,此处代码会被摇树移除掉。
|
"content-type": "application/json",
|
||||||
//baseURL = 'http://60.247.146.5:93'; // 发布到生产环境时,此处代码会被摇树移除掉。
|
VersionCode: uni.getStorageSync("setVersion").VersionCode,
|
||||||
//baseURL = 'http://60.247.146.5:96'; // 发布到生产环境时,此处代码会被摇树移除掉。
|
DeviceBrand: uni.getStorageSync("setVersion").DeviceBrand,
|
||||||
//baseURL = 'https://app.mrrweb.com.cn';
|
DeviceType: uni.getStorageSync("setVersion").DeviceType,
|
||||||
} else {
|
},
|
||||||
baseURL = url; // 发布到生产环境时,此处代码会被摇树移除掉。
|
timeout: 60000, // 超时时间
|
||||||
baseURL = 'http://60.247.146.5:93'; // 发布到生产环境时,此处代码会被摇树移除掉。
|
};
|
||||||
//baseURL = 'http://60.247.146.5:96'; // 发布到生产环境时,此处代码会被摇树移除掉。
|
|
||||||
//baseURL = 'https://app.mrrweb.com.cn';
|
|
||||||
|
|
||||||
console.log('生产环境');
|
options = {
|
||||||
}
|
...config,
|
||||||
|
...options,
|
||||||
|
url: !isUpdate ? `${config.baseURL}${options.url}` : options.url,
|
||||||
|
};
|
||||||
|
|
||||||
// 基础配置
|
// 请求拦截
|
||||||
const config = {
|
options = requestInterceptor(options);
|
||||||
baseURL: baseURL, // APP和H5的开发URL
|
|
||||||
baseURL: baseURL, // APP和H5的开发URL
|
|
||||||
// baseURL: 'https://app.mrrweb.com.cn', // APP和H5的生产URL
|
|
||||||
|
|
||||||
header: {
|
// 发起请求
|
||||||
'content-type': 'application/json',
|
return new Promise((resolve, reject) => {
|
||||||
'VersionCode': uni.getStorageSync('setVersion').VersionCode,
|
// #ifdef H5
|
||||||
'DeviceBrand': uni.getStorageSync('setVersion').DeviceBrand,
|
// H5端添加loading
|
||||||
'DeviceType': uni.getStorageSync('setVersion').DeviceType
|
if (!options.hideLoading) {
|
||||||
},
|
uni.showLoading({
|
||||||
timeout: 60000 // 超时时间
|
title: "加载中...",
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
uni.request({
|
||||||
|
...options,
|
||||||
|
success: (res) => {
|
||||||
|
// #ifdef H5
|
||||||
|
if (!options.hideLoading) {
|
||||||
|
uni.hideLoading();
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
resolve(responseInterceptor(options, res, resolve, reject));
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
// #ifdef H5
|
||||||
|
if (!options.hideLoading) {
|
||||||
|
uni.hideLoading();
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
|
||||||
options = {
|
// 网络错误处理
|
||||||
...config,
|
let errorMsg = "网络错误,请稍后重试";
|
||||||
...options,
|
// #ifdef H5
|
||||||
url: !isUpdate ? `${config.baseURL}${options.url}` : options.url
|
if (err.errMsg.includes("timeout")) {
|
||||||
}
|
errorMsg = "请求超时,请检查网络";
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
uni.showToast({
|
||||||
// 请求拦截
|
title: errorMsg,
|
||||||
options = requestInterceptor(options)
|
icon: "none",
|
||||||
|
});
|
||||||
// 发起请求
|
reject(err);
|
||||||
return new Promise((resolve, reject) => {
|
},
|
||||||
// #ifdef H5
|
});
|
||||||
// H5端添加loading
|
});
|
||||||
if (!options.hideLoading) {
|
};
|
||||||
uni.showLoading({
|
|
||||||
title: '加载中...'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
uni.request({
|
|
||||||
...options,
|
|
||||||
success: (res) => {
|
|
||||||
// #ifdef H5
|
|
||||||
if (!options.hideLoading) {
|
|
||||||
uni.hideLoading()
|
|
||||||
}
|
|
||||||
// #endif
|
|
||||||
resolve(responseInterceptor(options, res, resolve, reject))
|
|
||||||
},
|
|
||||||
fail: (err) => {
|
|
||||||
// #ifdef H5
|
|
||||||
if (!options.hideLoading) {
|
|
||||||
uni.hideLoading()
|
|
||||||
}
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
// 网络错误处理
|
|
||||||
let errorMsg = '网络错误,请稍后重试'
|
|
||||||
// #ifdef H5
|
|
||||||
if (err.errMsg.includes('timeout')) {
|
|
||||||
errorMsg = '请求超时,请检查网络'
|
|
||||||
}
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
uni.showToast({
|
|
||||||
title: errorMsg,
|
|
||||||
icon: 'none'
|
|
||||||
})
|
|
||||||
reject(err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// 处理 401 未授权
|
// 处理 401 未授权
|
||||||
async function handleUnauthorized(originalRequest, resolve, reject) {
|
async function handleUnauthorized(originalRequest, resolve, reject) {
|
||||||
if (!getToken()) {
|
if (!getToken()) {
|
||||||
return redirectToLogin()
|
return redirectToLogin();
|
||||||
}
|
}
|
||||||
// 如果正在刷新 Token,将请求加入队列
|
// 如果正在刷新 Token,将请求加入队列
|
||||||
if (isRefreshing) {
|
if (isRefreshing) {
|
||||||
return subscribeTokenRefresh(token => {
|
return subscribeTokenRefresh((token) => {
|
||||||
originalRequest.header['Authorization'] = `Bearer ${token}`
|
originalRequest.header["Authorization"] = `Bearer ${token}`;
|
||||||
request(originalRequest, true).then(resolve).catch(reject)
|
request(originalRequest, true).then(resolve).catch(reject);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
isRefreshing = true
|
isRefreshing = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const newToken = await refreshToken()
|
const newToken = await refreshToken();
|
||||||
setToken(newToken)
|
setToken(newToken);
|
||||||
onRrefreshed(newToken)
|
onRrefreshed(newToken);
|
||||||
|
|
||||||
// 用新 Token 重试原始请求
|
// 用新 Token 重试原始请求
|
||||||
originalRequest.header['Authorization'] = `Bearer ${newToken}`
|
originalRequest.header["Authorization"] = `Bearer ${newToken}`;
|
||||||
const response = await request(originalRequest, true)
|
const response = await request(originalRequest, true);
|
||||||
// resolve(response)
|
// resolve(response)
|
||||||
return response
|
return response;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
removeToken()
|
removeToken();
|
||||||
redirectToLogin()
|
redirectToLogin();
|
||||||
// reject(error)
|
// reject(error)
|
||||||
return error
|
return error;
|
||||||
} finally {
|
} finally {
|
||||||
isRefreshing = false
|
isRefreshing = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 刷新 Token
|
// 刷新 Token
|
||||||
async function refreshToken() {
|
async function refreshToken() {
|
||||||
const refreshToken = uni.getStorageSync('refreshToken')
|
const refreshToken = uni.getStorageSync("refreshToken");
|
||||||
if (!refreshToken) {
|
if (!refreshToken) {
|
||||||
throw new Error('No refresh token')
|
throw new Error("No refresh token");
|
||||||
}
|
}
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: '/sj/refreshtoken',
|
url: "/sj/refreshtoken",
|
||||||
data: {
|
data: {
|
||||||
refresh_token: uni.getStorageSync('refreshToken'),
|
refresh_token: uni.getStorageSync("refreshToken"),
|
||||||
deviceid: getApp().globalData.deviceid
|
deviceid: getApp().globalData.deviceid,
|
||||||
},
|
},
|
||||||
method: 'POST'
|
method: "POST",
|
||||||
})
|
});
|
||||||
|
|
||||||
if (res.state == 1 || res.code == 200) {
|
if (res.state == 1 || res.code == 200) {
|
||||||
uni.setStorageSync('accessToken', res.access_token)
|
uni.setStorageSync("accessToken", res.access_token);
|
||||||
uni.setStorageSync('refreshToken', res.refresh_token)
|
uni.setStorageSync("refreshToken", res.refresh_token);
|
||||||
return res.access_token
|
return res.access_token;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Error('Refresh token failed')
|
throw new Error("Refresh token failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 跳转到登录页
|
// 跳转到登录页
|
||||||
function redirectToLogin() {
|
function redirectToLogin() {
|
||||||
// uni.reLaunch({
|
// uni.reLaunch({
|
||||||
// url: '/pages/login/login'
|
// url: '/pages/login/login'
|
||||||
// })
|
// })
|
||||||
//一键登录测试
|
//一键登录测试
|
||||||
// uni.oprPresentLogin()
|
// uni.oprPresentLogin()
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/blogPopup/blogPopup'
|
url: "/pages/blogPopup/blogPopup",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 导出请求方法
|
// 导出请求方法
|
||||||
export default {
|
export default {
|
||||||
// GET请求
|
// GET请求
|
||||||
get(url, data = {}, options = {}) {
|
get(url, data = {}, options = {}) {
|
||||||
return request({
|
return request({
|
||||||
url,
|
url,
|
||||||
data,
|
data,
|
||||||
method: 'GET',
|
method: "GET",
|
||||||
...options
|
...options,
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
// POST请求
|
// POST请求
|
||||||
post(url, data = {}, options = {}) {
|
post(url, data = {}, options = {}) {
|
||||||
return request({
|
return request({
|
||||||
url,
|
url,
|
||||||
data,
|
data,
|
||||||
method: 'POST',
|
method: "POST",
|
||||||
...options
|
...options,
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
// PUT请求
|
// PUT请求
|
||||||
put(url, data = {}, options = {}) {
|
put(url, data = {}, options = {}) {
|
||||||
return request({
|
return request({
|
||||||
url,
|
url,
|
||||||
data,
|
data,
|
||||||
method: 'PUT',
|
method: "PUT",
|
||||||
...options
|
...options,
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
// DELETE请求
|
// DELETE请求
|
||||||
delete(url, data = {}, options = {}) {
|
delete(url, data = {}, options = {}) {
|
||||||
return request({
|
return request({
|
||||||
url,
|
url,
|
||||||
data,
|
data,
|
||||||
method: 'DELETE',
|
method: "DELETE",
|
||||||
...options
|
...options,
|
||||||
})
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue