const mysql = require('mysql2/promise'); const config = require('../config/database'); const { DOMAIN_CONFIG } = require('../config/domain'); const { toRelativeUrl } = require('../utils/image-url'); async function convertToRelativeUrls() { try { const connection = await mysql.createConnection(config); console.log('✅ 数据库连接成功\n'); console.log('🔍 检查数据库中的图片URL...'); const [goods] = await connection.execute('SELECT id, images FROM goods'); console.log(`找到 ${goods.length} 条商品记录\n`); let updatedCount = 0; // 更新图片URL for (const item of goods) { if (item.images) { let oldImages = item.images; let newImages = oldImages; try { // 尝试解析JSON let imagesArray = JSON.parse(oldImages); // 转换每个URL let convertedArray = imagesArray.map(url => toRelativeUrl(url)); newImages = JSON.stringify(convertedArray); if (oldImages !== newImages) { await connection.execute( 'UPDATE goods SET images = ? WHERE id = ?', [newImages, item.id] ); console.log(`商品ID ${item.id}:`); console.log(` 旧: ${oldImages}`); console.log(` 新: ${newImages}`); console.log('---'); updatedCount++; } } catch (e) { // 如果不是有效JSON,直接尝试转换 let converted = toRelativeUrl(oldImages); if (converted !== oldImages) { newImages = converted; await connection.execute( 'UPDATE goods SET images = ? WHERE id = ?', [newImages, item.id] ); console.log(`商品ID ${item.id} (非JSON格式):`); console.log(` 旧: ${oldImages}`); console.log(` 新: ${newImages}`); console.log('---'); updatedCount++; } } } } // 检查积分商品 const [pointsGoods] = await connection.execute('SELECT id, images FROM points_goods'); if (pointsGoods.length > 0) { console.log(`\n检查 ${pointsGoods.length} 条积分商品记录...`); for (const item of pointsGoods) { if (item.images) { let oldImages = item.images; let newImages = oldImages; try { let imagesArray = JSON.parse(oldImages); let convertedArray = imagesArray.map(url => toRelativeUrl(url)); newImages = JSON.stringify(convertedArray); } catch (e) { newImages = toRelativeUrl(oldImages); } if (oldImages !== newImages) { await connection.execute( 'UPDATE points_goods SET images = ? WHERE id = ?', [newImages, item.id] ); console.log(`积分商品ID ${item.id}: 已更新`); updatedCount++; } } } } await connection.end(); console.log(`\n✅ 完成!共更新了 ${updatedCount} 条记录`); } catch (error) { console.error('❌ 更新失败:', error); process.exit(1); } } convertToRelativeUrls();