106 lines
3.0 KiB
JavaScript

import { getStorage, removeStorage } from '@/starCloud/storage'
import { useStarCloudStore } from '@/starCloud/starCloud'
import { Result } from '@/starCloud/basic'
/*
* config
* baseUrl: 请求域名
* url: 请求路径
* method: 请求方法
* header: 请求头
* token: 请求token
* data: 请求参数
* */
const request = config => {
const starCloud = useStarCloudStore()
let timer
return new Promise(async resolve => {
const baseConfig = starCloud.getConfig()
const token = config?.token ? config.token : getStorage('starCloudToken')
// 请求地址
const URL = config.baseUrl ? config.baseUrl + config.url : baseConfig.baseUrl + config.url
// 默认请求头
const headerDefault = {
version: baseConfig.version + '+' + baseConfig.buildNumber
}
const header = {
...headerDefault,
...config.header
}
const method = config.method || 'POST'
const data = {
...config.data,
accessToken: token,
clientId: starCloud.clientId
}
const timestamp = new Date().getTime()
// 超时处理
timer = setTimeout(() => {
resolve(new Result(Result.Fail.code, {}, '网络访问失败,请检查网络是否正常'))
}, 3200)
uni.request({
url: URL,
method,
header,
data,
timeout: 3000,
async success(res) {
const { statusCode, data } = res
if (timer) {
clearTimeout(timer)
}
if (statusCode === 200) {
const code = data.errcode
const message = data.errmsg
if (code === 10003) {
removeStorage('starCloudToken')
removeStorage('starCloudUser')
const { code } = await starCloud.login({
username: starCloud.starCloudAccountInfo.username,
password: starCloud.starCloudAccountInfo.password,
uid: starCloud.starCloudAccountInfo.uid
})
if (code === Result.Success.code) {
resolve(await request(config))
}
} else {
resolve({
code,
data: data.data,
message
})
}
} else {
resolve(new Result(Result.Fail.code, {}, '网络访问失败,请检查网络是否正常'))
}
},
async fail(res) {
console.log('网络访问失败', res)
if (timer) {
clearTimeout(timer)
}
resolve(new Result(Result.Fail.code, {}, '网络访问失败,请检查网络是否正常'))
},
async complete(res) {
console.log(URL.substring(baseConfig.baseUrl.length + 1), {
env: baseConfig.name,
url: URL.substring(baseConfig.baseUrl.length + 1),
req: config?.data || {},
code: res?.data?.errcode,
res: res?.data?.data,
token: header?.authorization || '',
message: res?.data?.errmsg,
duration: new Date().getTime() - timestamp
})
}
})
})
}
export default request