167 lines
3.5 KiB
JavaScript
167 lines
3.5 KiB
JavaScript
/**
|
|
* API 请求封装
|
|
* 基于 uni.request 封装,支持拦截器、错误处理等
|
|
*/
|
|
|
|
// API 基础配置
|
|
const BASE_URL = 'http://xcsq.wxinh5.host'
|
|
|
|
// 请求拦截器
|
|
const requestInterceptor = (config) => {
|
|
// 可以在这里添加全局请求头、token 等
|
|
return config
|
|
}
|
|
|
|
// 响应拦截器
|
|
const responseInterceptor = (response) => {
|
|
// 统一处理响应数据
|
|
return response
|
|
}
|
|
|
|
// 错误处理
|
|
const handleError = (error) => {
|
|
console.error('API 请求错误:', error)
|
|
|
|
// 根据错误类型进行处理
|
|
if (error.errMsg && error.errMsg.includes('timeout')) {
|
|
uni.showToast({
|
|
title: '请求超时,请稍后重试',
|
|
icon: 'none',
|
|
duration: 2000
|
|
})
|
|
} else if (error.errMsg && error.errMsg.includes('fail')) {
|
|
uni.showToast({
|
|
title: '网络请求失败,请检查网络',
|
|
icon: 'none',
|
|
duration: 2000
|
|
})
|
|
}
|
|
|
|
return Promise.reject(error)
|
|
}
|
|
|
|
/**
|
|
* 通用请求方法
|
|
* @param {Object} options - 请求配置
|
|
* @returns {Promise} - 返回 Promise
|
|
*/
|
|
export const request = (options = {}) => {
|
|
return new Promise((resolve, reject) => {
|
|
// 合并配置
|
|
const config = {
|
|
url: '',
|
|
method: 'POST',
|
|
data: {},
|
|
header: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
timeout: 10000,
|
|
...options
|
|
}
|
|
|
|
// 处理完整 URL
|
|
if (!config.url.startsWith('http')) {
|
|
config.url = `${BASE_URL}${config.url}`
|
|
}
|
|
|
|
// 应用请求拦截器
|
|
const finalConfig = requestInterceptor(config)
|
|
|
|
// 执行请求
|
|
uni.request({
|
|
...finalConfig,
|
|
success: (response) => {
|
|
// 应用响应拦截器
|
|
const result = responseInterceptor(response)
|
|
|
|
// 根据 HTTP 状态码处理
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
resolve(result.data)
|
|
} else {
|
|
// 创建包含状态码和响应数据的错误对象
|
|
const error = new Error(`HTTP ${response.statusCode}: ${response.errMsg || '请求失败'}`)
|
|
error.statusCode = response.statusCode
|
|
error.response = response
|
|
error.data = result.data || response.data
|
|
reject(error)
|
|
}
|
|
},
|
|
fail: (error) => {
|
|
handleError(error).catch(reject)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* GET 请求
|
|
* @param {string} url - 请求地址
|
|
* @param {Object} params - 请求参数
|
|
* @param {Object} options - 其他配置
|
|
* @returns {Promise}
|
|
*/
|
|
export const get = (url, params = {}, options = {}) => {
|
|
return request({
|
|
url,
|
|
method: 'GET',
|
|
data: params,
|
|
...options
|
|
})
|
|
}
|
|
|
|
/**
|
|
* POST 请求
|
|
* @param {string} url - 请求地址
|
|
* @param {Object} data - 请求数据
|
|
* @param {Object} options - 其他配置
|
|
* @returns {Promise}
|
|
*/
|
|
export const post = (url, data = {}, options = {}) => {
|
|
return request({
|
|
url,
|
|
method: 'POST',
|
|
data,
|
|
...options
|
|
})
|
|
}
|
|
|
|
/**
|
|
* PUT 请求
|
|
* @param {string} url - 请求地址
|
|
* @param {Object} data - 请求数据
|
|
* @param {Object} options - 其他配置
|
|
* @returns {Promise}
|
|
*/
|
|
export const put = (url, data = {}, options = {}) => {
|
|
return request({
|
|
url,
|
|
method: 'PUT',
|
|
data,
|
|
...options
|
|
})
|
|
}
|
|
|
|
/**
|
|
* DELETE 请求
|
|
* @param {string} url - 请求地址
|
|
* @param {Object} params - 请求参数
|
|
* @param {Object} options - 其他配置
|
|
* @returns {Promise}
|
|
*/
|
|
export const del = (url, params = {}, options = {}) => {
|
|
return request({
|
|
url,
|
|
method: 'DELETE',
|
|
data: params,
|
|
...options
|
|
})
|
|
}
|
|
|
|
export default {
|
|
request,
|
|
get,
|
|
post,
|
|
put,
|
|
del
|
|
}
|