wx-starlock/utils/request.js
2025-02-27 11:29:53 +08:00

96 lines
2.8 KiB
JavaScript

import env from '@/config/env'
import { getStorage, removeStorage } from './storage'
/*
* config
* baseUrl: 请求域名
* url: 请求路径
* method: 请求方法
* header: 请求头
* token: 请求token
* data: 请求参数
* */
const request = config => {
let timer
return new Promise(async resolve => {
const baseConfig = await env[getApp().globalData.getEnvConfig()]
const token = config?.token ? config.token : getStorage('token')
const headerDefault = {
appid: getApp().globalData.appid,
version: baseConfig.version + '+' + baseConfig.buildNumber,
authorization: `Bearer ${token}`
}
const URL = config.baseUrl ? config.baseUrl + config.url : baseConfig.baseUrl + config.url
const method = config.method || 'POST'
const header = config.header || headerDefault
const data = config.data || {}
const timestamp = new Date().getTime()
timer = setTimeout(() => {
resolve({ code: -1, message: '网络访问失败,请检查网络是否正常' })
}, 7200)
uni.request({
url: URL,
method,
header,
data,
timeout: 7000,
async success(res) {
const { statusCode, data } = res
if (timer) {
clearTimeout(timer)
}
if (statusCode === 200) {
const code = data.errorCode
const message = data.errorMsg
if (code === 403) {
removeStorage('token')
getApp().globalData.updateIsLogin(false)
resolve({ code: 403, data, message: '登录已过期' })
uni.showModal({
title: '提示',
content: '登录已过期,请重新登录',
showCancel: false,
success() {
uni.reLaunch({
url: '/pages/home/home'
})
}
})
} else {
resolve({
code,
data: data.data,
message
})
}
} else {
resolve({ code: -1, data, message: '网络访问失败,请检查网络是否正常' })
}
},
async fail(res) {
console.log('网络访问失败', res)
if (timer) {
clearTimeout(timer)
}
resolve({ code: -1, message: '网络访问失败,请检查网络是否正常' })
},
async complete(res) {
console.log(URL.substring(baseConfig.baseUrl.length + 1), {
env: await getApp().globalData.getEnvConfig(),
url: URL.substring(baseConfig.baseUrl.length + 1),
req: config?.data || {},
code: res?.data?.errorCode,
res: res?.data?.data,
token: header?.authorization || '',
message: res?.data?.errorMsg,
duration: new Date().getTime() - timestamp
})
}
})
})
}
export default request