const { getDB, initDB } = require('./database'); /** * 修复商品图片路径 * 将 /uploads/product/ 更新为 /uploads/products/ */ async function fixImagePaths() { try { console.log('开始修复商品图片路径...'); // 初始化数据库连接 await initDB(); const db = getDB(); // 查询所有包含错误路径的商品 const [products] = await db.execute( "SELECT id, image_url FROM products WHERE image_url LIKE '/uploads/product/%'" ); console.log(`找到 ${products.length} 个需要修复的商品图片路径`); if (products.length === 0) { console.log('没有需要修复的图片路径'); return; } // 开始事务 await db.query('START TRANSACTION'); let updatedCount = 0; for (const product of products) { const oldPath = product.image_url; const newPath = oldPath.replace('/uploads/product/', '/uploads/products/'); console.log(`修复商品 ID ${product.id}: ${oldPath} -> ${newPath}`); await db.execute( 'UPDATE products SET image_url = ? WHERE id = ?', [newPath, product.id] ); updatedCount++; } // 提交事务 await db.query('COMMIT'); console.log(`成功修复 ${updatedCount} 个商品的图片路径`); // 验证修复结果 const [remainingProducts] = await db.execute( "SELECT COUNT(*) as count FROM products WHERE image_url LIKE '/uploads/product/%'" ); if (remainingProducts[0].count === 0) { console.log('所有图片路径修复完成!'); } else { console.log(`还有 ${remainingProducts[0].count} 个图片路径未修复`); } } catch (error) { console.error('修复图片路径时发生错误:', error); // 回滚事务 try { const db = getDB(); await db.query('ROLLBACK'); console.log('已回滚数据库事务'); } catch (rollbackError) { console.error('回滚事务失败:', rollbackError); } } } // 如果直接运行此脚本 if (require.main === module) { fixImagePaths() .then(() => { console.log('修复脚本执行完成'); process.exit(0); }) .catch((error) => { console.error('修复脚本执行失败:', error); process.exit(1); }); } module.exports = { fixImagePaths };