api
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
// 图片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
|
||||
};
|
||||
Reference in New Issue
Block a user