const mysql = require('mysql2/promise'); (async () => { // 🔴 口令不再内置明文(2026-09-23 入库口令处置 P2)。运行前请注入 DB_PASSWORD: // DB_PASSWORD='<本机 DB 口令>' node add_wx_link.js const c = await mysql.createConnection({ host: process.env.DB_HOST || 'localhost', user: process.env.DB_USER || 'root', password: process.env.DB_PASSWORD, database: process.env.DB_NAME || 'competition_db', }); try { await c.query("ALTER TABLE news ADD COLUMN wx_link VARCHAR(500) NULL DEFAULT NULL COMMENT '微信公众号文章链接' AFTER content"); console.log('Added wx_link column'); } catch (e) { if (e.code === 'ER_DUP_FIELDNAME') console.log('wx_link already exists'); else throw e; } try { await c.query("ALTER TABLE news ADD COLUMN news_type VARCHAR(20) NOT NULL DEFAULT 'content' COMMENT '新闻类型' AFTER wx_link"); console.log('Added news_type column'); } catch (e) { if (e.code === 'ER_DUP_FIELDNAME') console.log('news_type already exists'); else throw e; } const [cols] = await c.query('SHOW COLUMNS FROM news'); cols.forEach(x => console.log(x.Field, x.Type, x.Null)); await c.end(); })();