123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 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();
|