const luchRequest = require('luch-request') const Request = luchRequest.default || luchRequest const { generateSignatureHeaders } = require('./signature') const store = require('../store/index') const BASE_URL = 'http://192.168.110.64:8084/api' const http = new Request({ baseURL: BASE_URL, timeout: 15000, header: { 'Content-Type': 'application/json' } }) // 请求拦截器 http.interceptors.request.use( (config) => { // 注入 JWT token const token = store.getToken() if (token) { config.header = config.header || {} config.header.Authorization = 'Bearer ' + token } // 注入签名头 const method = (config.method || 'GET').toUpperCase() const url = config.url || '' const body = config.data const signatureHeaders = generateSignatureHeaders(method, url, body) config.header = config.header || {} Object.assign(config.header, signatureHeaders) return config }, (error) => Promise.reject(error) ) // 响应拦截器 http.interceptors.response.use( (response) => { if (response.statusCode === 200) { return response.data } return response }, (error) => { if (error.statusCode === 401) { store.clearLogin() const pages = getCurrentPages() const currentPage = pages[pages.length - 1] if (currentPage && currentPage.route !== 'pages/login/login') { uni.reLaunch({ url: '/pages/login/login' }) } } return Promise.reject(error) } ) /** * 将 coverImage 字段值解析为完整图片 URL */ function resolveCoverUrl(coverImage) { if (!coverImage) return '' if (/^\/api\/files\/\d+\/preview$/.test(coverImage)) { return BASE_URL + coverImage.substring(4) } if (/^\d+$/.test(coverImage)) { return BASE_URL + '/files/' + coverImage + '/preview' } return coverImage } module.exports = http module.exports.resolveCoverUrl = resolveCoverUrl