const app = require('./app'); const { SERVER_HOST, SERVER_PORT } = require('./config'); const mysql2 = require('mysql2/promise'); const config = require('./config'); const fs = require('fs'); const md5 = require('md5.js'); async function initDatabase() { const dbName = config.DATABASE_NAME; async function connectDB() { try { const connection = await mysql2.createConnection({ host: config.DATABASE_HOST, port: config.DATABASE_PORT, user: config.DATABASE_USER, password: config.DATABASE_PASSWORD, multipleStatements: true, }); await connection.connect(); return connection; } catch (error) { console.log(error); process.exit(1); } } const connection = await connectDB(); async function createUserIfNotExists() { await connection.query(`USE \`${dbName}\`;`); try { const [userRows] = await connection.query('SELECT * FROM `users`;'); if (userRows.length === 0) { const userName = config.USERNAME || 'admin@marsview.com'; const userPassword = config.PASSWORD || 'admin'; const pwd = new md5().update(userPassword).digest('hex'); console.log(`用户 ${userName} 不存在,正在创建...`); await connection.query(`INSERT INTO \`users\` (\`nick_name\`, \`user_name\`, \`user_pwd\`, \`avatar\`) VALUES ('admin', '${userName}', '${pwd}', '');`); console.log(`用户 ${userName} 创建成功。`); } else { console.log(`用户表已存在数据,跳过创建用户。`); } } catch (error) { console.error(`创建用户失败: ${error.message}`); } } // 检查数据库是否存在,如果不存在则创建 async function createDatabaseIfNotExists() { let [rows] = await connection.query('SHOW DATABASES LIKE ?', [dbName]); if (rows.length === 0) { console.log('数据库不存在,自动创建中...'); await connection.query(`CREATE DATABASE \`${dbName}\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`); console.log(`Database ${dbName} created successfully.`); // 选择当前数据库 await connection.query(`USE \`${dbName}\`;`); // 读取并执行初始化SQL脚本 console.log('正在执行初始化SQL脚本...'); const initSql = fs.readFileSync('./init.sql', 'utf8'); await connection.query(initSql); console.log(`Database ${dbName} created successfully.`); } else { console.log(`数据库已经存在,跳过创建。`); } [rows] = await connection.query('SHOW DATABASES LIKE ?', [config.MODEL_DATABASE_NAME]); if (rows.length === 0) { console.log(`创建数据库 ${config.MODEL_DATABASE_NAME}`); const statement = `CREATE DATABASE IF NOT EXISTS ${config.MODEL_DATABASE_NAME} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`; await connection.query(statement); console.log(`创建数据库 ${config.MODEL_DATABASE_NAME} 成功`); } else { console.log(`数据库 ${config.MODEL_DATABASE_NAME} 已经存在, 跳过创建。`); } // 判断有没有用户,如果没有,再创建 await createUserIfNotExists(); } try { await createDatabaseIfNotExists(); } catch (err) { console.error(`初始化数据库失败: ${err.message}`); } finally { await connection.end(); } } async function main() { try { await initDatabase(); app.listen(SERVER_PORT, () => { console.log(`Marsview服务已启动 ${SERVER_HOST}:${SERVER_PORT}`); }); } catch { process.exit(1); } } main();