From 418d5b24f979e35f0acb852ad89f8a3ef4a561c1 Mon Sep 17 00:00:00 2001 From: wangxiaogang <1433729587@qq.com> Date: Fri, 29 May 2026 17:07:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=BF=81=E7=A7=BB=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=89=A7=E8=A1=8C=EF=BC=8C=E4=B8=8D=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=20schema/seed=20=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:runMigrations 在 try 块内,如果 seed 失败则迁移不执行 修复:将迁移逻辑移到独立的 try-catch 块,确保始终执行 添加详细日志帮助调试 --- server/src/db/init.ts | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/server/src/db/init.ts b/server/src/db/init.ts index e5c02af..27b4bf3 100644 --- a/server/src/db/init.ts +++ b/server/src/db/init.ts @@ -12,19 +12,27 @@ async function columnExists(conn: mysql.Connection, table: string, column: strin } async function runMigrations(conn: mysql.Connection) { + console.log('[DB] Checking migrations...') + // transactions 表添加 user_id - if (!await columnExists(conn, 'transactions', 'user_id')) { + const hasTxUserId = await columnExists(conn, 'transactions', 'user_id') + console.log(`[DB] transactions.user_id exists: ${hasTxUserId}`) + if (!hasTxUserId) { console.log('[DB] Migrating: adding user_id to transactions') await conn.query('ALTER TABLE transactions ADD COLUMN user_id INT NOT NULL DEFAULT 1 AFTER id') await conn.query('ALTER TABLE transactions ADD INDEX idx_user_date (user_id, date)') await conn.query('ALTER TABLE transactions ADD INDEX idx_user_type_date (user_id, type, date)') + console.log('[DB] transactions.user_id added') } // budgets 表添加 user_id - if (!await columnExists(conn, 'budgets', 'user_id')) { + const hasBudgetUserId = await columnExists(conn, 'budgets', 'user_id') + console.log(`[DB] budgets.user_id exists: ${hasBudgetUserId}`) + if (!hasBudgetUserId) { console.log('[DB] Migrating: adding user_id to budgets') await conn.query('ALTER TABLE budgets ADD COLUMN user_id INT NOT NULL DEFAULT 1 AFTER id') await conn.query('ALTER TABLE budgets ADD UNIQUE KEY uk_user_month (user_id, month)') + console.log('[DB] budgets.user_id added') } } @@ -50,6 +58,7 @@ export async function initDatabase() { database: dbName, multipleStatements: true, }) + try { const schemaPath = join(__dirname, 'schema.sql') const seedPath = join(__dirname, 'seed.sql') @@ -63,18 +72,23 @@ export async function initDatabase() { const seed = readFileSync(seedPath, 'utf-8') await initConn.query(seed) - // 运行迁移(添加缺失列) - await runMigrations(initConn) - - console.log('[DB] Database initialized') + console.log('[DB] Schema and seed applied') } catch (err: any) { if (err.code === 'ER_DUP_ENTRY' || err.errno === 1062) { console.log('[DB] Already initialized, skipping seed') - await runMigrations(initConn) } else { - console.error('[DB] Init failed:', err.message) + console.error('[DB] Init warning:', err.message) } - } finally { - await initConn.end() } + + // 始终运行迁移(独立于 schema/seed) + try { + await runMigrations(initConn) + console.log('[DB] Migrations complete') + } catch (err: any) { + console.error('[DB] Migration error:', err.message) + } + + await initConn.end() + console.log('[DB] Database ready') }