// 图片URL处理工具 const DOMAIN_CONFIG = require('./domain').DOMAIN_CONFIG; // 将完整URL转换为相对路径(用于存储到数据库) function toRelativeUrl(url) { if (!url) return ''; // 移除域名前缀,保留相对路径 const baseUrl = DOMAIN_CONFIG.BASE_URL; if (url.startsWith(baseUrl)) { return url.replace(baseUrl, ''); } // 移除其他可能的前缀 const patterns = [ /^https?:\/\/donghy\.top/, /^https?:\/\/110\.42\.255\.239(:\d+)?/, /^https?:\/\/localhost(:\d+)?/ ]; for (const pattern of patterns) { if (pattern.test(url)) { return url.replace(pattern, ''); } } return url; } // 将相对路径转换为完整URL(用于返回给前端) function toFullUrl(url) { if (!url) return ''; // 如果已经是完整URL,直接返回 if (url.startsWith('http://') || url.startsWith('https://')) { return url; } // 如果是相对路径,拼接当前域名 const baseUrl = DOMAIN_CONFIG.BASE_URL; if (url.startsWith('/')) { return baseUrl + url; } if (url.startsWith('img/')) { return baseUrl + '/' + url; } return url; } // 处理商品图片字段 function processGoodsImages(goods) { if (!goods) return goods; const processItem = (item) => { if (item.images) { try { const images = JSON.parse(item.images); const fullUrls = images.map(img => toFullUrl(img)); item.images = JSON.stringify(fullUrls); } catch (e) { // 如果不是JSON格式,保持原样 } } return item; }; if (Array.isArray(goods)) { return goods.map(processItem); } return processItem(goods); } module.exports = { toRelativeUrl, toFullUrl, processGoodsImages };