JinShan_uniapp/utils/request.js
2025-07-16 15:07:16 +08:00

68 lines
2.2 KiB
JavaScript

import { BASE_URL } from "./config";
// 获取本地Token的同步方法
const getToken = () => {
try {
return uni.getStorageSync('token') || null
} catch (e) {
console.error('获取本地Token失败:', e)
return null
}
}
// 统一请求方法
export const request = (options) => {
return new Promise((resolve, reject) => {
// 合并请求头
const header = {
'Content-Type': 'application/json',
...(options.header || {}), // 允许覆盖默认header
Authorization: getToken() ? `Bearer ${getToken()}` : undefined
}
// 过滤掉undefined的header项
const filteredHeader = Object.fromEntries(
Object.entries(header).filter(([_, v]) => v !== undefined)
)
uni.request({
url: `${BASE_URL}${options.url}`,
method: options.method || 'GET',
data: options.data || {},
header: filteredHeader,
success: (res) => {
// 处理401未授权
if (res.statusCode === 401) {
uni.removeStorageSync('token')
// uni.showToast({ title: '请前往"个人中心页"登录', icon: 'none' })
// uni.navigateTo({ url: '/pages/mine/index' })
return reject(new Error('登录状态已过期'))
}
// 处理其他错误状态码
if (res.statusCode < 200 || res.statusCode >= 300) {
const errorMsg = res.data?.message || `请求失败 (${res.statusCode})`
uni.showToast({ title: errorMsg, icon: 'none' })
return reject(new Error(errorMsg))
}
resolve(res.data)
},
fail: (err) => {
const errorMsg = err.errMsg.includes('timeout')
? '网络请求超时'
: '网络连接失败'
uni.showToast({ title: errorMsg, icon: 'none' })
reject(new Error(errorMsg))
}
})
})
}
// 封装常用方法
export const get = (url, data, header) => request({ url, method: 'GET', data, header })
export const post = (url, data, header) => request({ url, method: 'POST', data, header })
export const put = (url, data, header) => request({ url, method: 'PUT', data, header })
export const del = (url, data, header) => request({ url, method: 'DELETE', data, header })