116 lines
2.3 KiB
JavaScript
116 lines
2.3 KiB
JavaScript
// 请求工具类
|
||
const auth = require('./auth.js')
|
||
|
||
const request = (options) => {
|
||
return new Promise((resolve, reject) => {
|
||
// 添加认证头
|
||
const token = auth.getToken()
|
||
if (token) {
|
||
options.header = {
|
||
...options.header,
|
||
'Authorization': `Bearer ${token}`
|
||
}
|
||
}
|
||
|
||
// 添加基础URL
|
||
const app = getApp()
|
||
if (!options.url.startsWith('http')) {
|
||
options.url = app.globalData.baseUrl + options.url
|
||
}
|
||
|
||
// 添加默认配置
|
||
const config = {
|
||
timeout: 10000,
|
||
dataType: 'json',
|
||
responseType: 'text',
|
||
...options
|
||
}
|
||
|
||
console.log('发起请求:', config)
|
||
|
||
wx.request({
|
||
...config,
|
||
success: (res) => {
|
||
console.log('请求成功:', res)
|
||
|
||
// 检查响应状态
|
||
if (res.statusCode === 200) {
|
||
const { code, message, data } = res.data
|
||
|
||
if (code === 200) {
|
||
resolve(data)
|
||
} else if (code === 401) {
|
||
// token过期,清除本地存储并跳转登录
|
||
auth.clearToken()
|
||
wx.reLaunch({
|
||
url: '/pages/login/login'
|
||
})
|
||
reject(new Error(message || '认证失败'))
|
||
} else {
|
||
reject(new Error(message || '请求失败'))
|
||
}
|
||
} else {
|
||
reject(new Error(`请求失败: ${res.statusCode}`))
|
||
}
|
||
},
|
||
fail: (err) => {
|
||
console.error('请求失败:', err)
|
||
reject(new Error(err.errMsg || '网络请求失败'))
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
// GET请求
|
||
const get = (url, params = {}) => {
|
||
const queryString = Object.keys(params)
|
||
.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
|
||
.join('&')
|
||
|
||
const fullUrl = queryString ? `${url}?${queryString}` : url
|
||
|
||
return request({
|
||
url: fullUrl,
|
||
method: 'GET'
|
||
})
|
||
}
|
||
|
||
// POST请求
|
||
const post = (url, data = {}) => {
|
||
return request({
|
||
url,
|
||
method: 'POST',
|
||
data,
|
||
header: {
|
||
'Content-Type': 'application/json'
|
||
}
|
||
})
|
||
}
|
||
|
||
// PUT请求
|
||
const put = (url, data = {}) => {
|
||
return request({
|
||
url,
|
||
method: 'PUT',
|
||
data,
|
||
header: {
|
||
'Content-Type': 'application/json'
|
||
}
|
||
})
|
||
}
|
||
|
||
// DELETE请求
|
||
const del = (url) => {
|
||
return request({
|
||
url,
|
||
method: 'DELETE'
|
||
})
|
||
}
|
||
|
||
module.exports = {
|
||
get,
|
||
post,
|
||
put,
|
||
delete: del
|
||
}
|