template-demo/utils/httpClient.js

89 lines
2.1 KiB
JavaScript
Raw Permalink Normal View History

2025-12-15 18:46:47 +08:00
/**
* 统一的 HTTP 客户端
* 自动根据环境切换使用 gatewayHttpClient HttpClient
*/
import { gatewayHttpClient, HttpClient } from '@jdmini/api'
const { IS_DEV, API_BASE } = require('./config.js')
// 开发环境使用 HttpClient
const devHttpClient = IS_DEV ? new HttpClient({
baseURL: API_BASE,
timeout: 30000,
}) : null
/**
* 统一的 HTTP 请求方法
* @param {String} url - 请求路径相对路径不包含 baseURL
* @param {String} method - 请求方法 GET/POST/PUT/DELETE
* @param {Object} data - 请求数据
* @param {Object} options - 额外选项
* @returns {Promise}
*/
function request(url, method = 'GET', data = {}, options = {}) {
// 确保 URL 以 / 开头
const apiUrl = url.startsWith('/') ? url : `/${url}`
if (IS_DEV) {
// 开发环境:使用 HttpClient
console.log(`[DEV] ${method} ${API_BASE}${apiUrl}`, data)
return devHttpClient.request(apiUrl, method, data, options)
} else {
// 生产环境:使用 gatewayHttpClient
// gatewayHttpClient 需要完整的路径mp/jd-haiba/user/login
const fullUrl = `${API_BASE}${apiUrl}`
console.log(`[PROD] ${method} ${fullUrl}`, data)
// gatewayHttpClient.request 的参数顺序:(url, method, data, options)
return gatewayHttpClient.request(fullUrl, method, data, options)
}
}
/**
* GET 请求
*/
function get(url, params = {}, options = {}) {
return request(url, 'GET', params, options)
}
/**
* POST 请求
*/
function post(url, data = {}, options = {}) {
return request(url, 'POST', data, options)
}
/**
* PUT 请求
*/
function put(url, data = {}, options = {}) {
return request(url, 'PUT', data, options)
}
/**
* DELETE 请求
*/
function del(url, data = {}, options = {}) {
return request(url, 'DELETE', data, options)
}
/**
* 上传文件暂时保留原有逻辑
*/
function upload(filePath, formData = {}) {
return gatewayHttpClient.uploadFile(filePath,formData)
}
module.exports = {
request,
get,
post,
put,
del,
upload,
// 导出原始客户端供特殊场景使用
gatewayHttpClient,
devHttpClient
}