Files
jurong_circle_black/fix-image-paths.js
2025-08-26 10:06:23 +08:00

89 lines
2.3 KiB
JavaScript

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 };