Files
wxapp_escort_admin/utils/request.js
T
2026-09-03 11:35:21 +08:00

78 lines
2.2 KiB
JavaScript

class Request {
constructor(baseURL = 'https://api.huashengtec.com') {
//constructor(baseURL = 'http://127.0.0.1:9004') {
this.baseURL = baseURL
}
async request(options) {
const { url, method = 'GET', data = {}, header = {}, skipAuthWait = false, ...rest } = options
// 等待登录完成后再携带 token,避免页面请求早于 app.js 登录的竞态
// skipAuthWait: 登录请求自身使用,否则会等待自己导致死锁
let token = ''
try {
const app = getApp()
if (skipAuthWait) {
token = app?.globalData?.user?.security?.token || ''
} else if (app && app.ensureLogin) {
const user = await app.ensureLogin()
token = user?.security?.token || ''
} else {
token = app?.globalData?.user?.security?.token || ''
}
} catch (e) {
// 登录失败仍继续请求,由服务端返回未授权错误
}
return new Promise((resolve, reject) => {
data.appId = 'wxapp-escort-admin'
wx.request({
url: url.startsWith('http') ? url : `${this.baseURL}${url}`,
method,
data,
header: {
'Content-Type': 'application/json',
...(token ? { 'token': token } : {}),
...header
},
...rest,
success: (res) => {
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(res.data)
} else {
reject(new Error(`HTTP ${res.statusCode}`))
}
},
fail: (err) => {
reject(err)
}
})
})
}
get(url, params = {}, options = {}) {
return this.request({ url, method: 'GET', data: params, ...options })
}
post(url, data = {}, options = {}) {
return this.request({ url, method: 'POST', data, ...options })
}
put(url, data = {}, options = {}) {
return this.request({ url, method: 'PUT', data, ...options })
}
patch(url, data = {}, options = {}) {
return this.request({ url, method: 'PATCH', data, ...options })
}
delete(url, data = {}, options = {}) {
return this.request({ url, method: 'DELETE', data, ...options })
}
}
const request = new Request()
module.exports = request