/** * 数据库初始化脚本 * 运行: npm run init-db */ const fs = require('fs'); const path = require('path'); const mysql = require('mysql2/promise'); require('dotenv').config(); async function initDatabase() { console.log('开始初始化数据库...'); // 先连接到MySQL(不指定数据库) const connection = await mysql.createConnection({ host: process.env.DB_HOST || 'localhost', port: process.env.DB_PORT || 3306, user: process.env.DB_USER || 'root', password: process.env.DB_PASSWORD || '', multipleStatements: true }); try { // 读取并执行schema.sql console.log('创建数据库表结构...'); const schemaSQL = fs.readFileSync( path.join(__dirname, 'schema.sql'), 'utf8' ); await connection.query(schemaSQL); console.log('表结构创建成功!'); // 读取并执行种子数据 console.log('导入种子故事数据(第1部分)...'); const seedSQL1 = fs.readFileSync( path.join(__dirname, 'seed_stories_part1.sql'), 'utf8' ); await connection.query(seedSQL1); console.log('种子数据第1部分导入成功!'); console.log('导入种子故事数据(第2部分)...'); const seedSQL2 = fs.readFileSync( path.join(__dirname, 'seed_stories_part2.sql'), 'utf8' ); await connection.query(seedSQL2); console.log('种子数据第2部分导入成功!'); console.log('\n数据库初始化完成!'); console.log('共创建10个种子故事,包含66个剧情节点和多个结局分支。'); } catch (error) { console.error('数据库初始化失败:', error.message); throw error; } finally { await connection.end(); } } // 运行初始化 initDatabase() .then(() => { console.log('\n可以启动服务器了: npm start'); process.exit(0); }) .catch((err) => { console.error('初始化过程中出现错误:', err); process.exit(1); });