main.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. const app = require('./app');
  2. const { SERVER_HOST, SERVER_PORT } = require('./config');
  3. const mysql2 = require('mysql2/promise');
  4. const config = require('./config');
  5. const fs = require('fs');
  6. const md5 = require('md5.js');
  7. async function initDatabase() {
  8. const dbName = config.DATABASE_NAME;
  9. async function connectDB() {
  10. try {
  11. const connection = await mysql2.createConnection({
  12. host: config.DATABASE_HOST,
  13. port: config.DATABASE_PORT,
  14. user: config.DATABASE_USER,
  15. password: config.DATABASE_PASSWORD,
  16. multipleStatements: true,
  17. });
  18. await connection.connect();
  19. return connection;
  20. } catch (error) {
  21. console.log(error);
  22. process.exit(1);
  23. }
  24. }
  25. const connection = await connectDB();
  26. async function createUserIfNotExists() {
  27. await connection.query(`USE \`${dbName}\`;`);
  28. try {
  29. const [userRows] = await connection.query('SELECT * FROM `users`;');
  30. if (userRows.length === 0) {
  31. const userName = config.USERNAME || 'admin@marsview.com';
  32. const userPassword = config.PASSWORD || 'admin';
  33. const pwd = new md5().update(userPassword).digest('hex');
  34. console.log(`用户 ${userName} 不存在,正在创建...`);
  35. await connection.query(`INSERT INTO \`users\` (\`nick_name\`, \`user_name\`, \`user_pwd\`, \`avatar\`) VALUES ('admin', '${userName}', '${pwd}', '');`);
  36. console.log(`用户 ${userName} 创建成功。`);
  37. } else {
  38. console.log(`用户表已存在数据,跳过创建用户。`);
  39. }
  40. } catch (error) {
  41. console.error(`创建用户失败: ${error.message}`);
  42. }
  43. }
  44. // 检查数据库是否存在,如果不存在则创建
  45. async function createDatabaseIfNotExists() {
  46. let [rows] = await connection.query('SHOW DATABASES LIKE ?', [dbName]);
  47. if (rows.length === 0) {
  48. console.log('数据库不存在,自动创建中...');
  49. await connection.query(`CREATE DATABASE \`${dbName}\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`);
  50. console.log(`Database ${dbName} created successfully.`);
  51. // 选择当前数据库
  52. await connection.query(`USE \`${dbName}\`;`);
  53. // 读取并执行初始化SQL脚本
  54. console.log('正在执行初始化SQL脚本...');
  55. const initSql = fs.readFileSync('./init.sql', 'utf8');
  56. await connection.query(initSql);
  57. console.log(`Database ${dbName} created successfully.`);
  58. } else {
  59. console.log(`数据库已经存在,跳过创建。`);
  60. }
  61. [rows] = await connection.query('SHOW DATABASES LIKE ?', [config.MODEL_DATABASE_NAME]);
  62. if (rows.length === 0) {
  63. console.log(`创建数据库 ${config.MODEL_DATABASE_NAME}`);
  64. const statement = `CREATE DATABASE IF NOT EXISTS ${config.MODEL_DATABASE_NAME} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`;
  65. await connection.query(statement);
  66. console.log(`创建数据库 ${config.MODEL_DATABASE_NAME} 成功`);
  67. } else {
  68. console.log(`数据库 ${config.MODEL_DATABASE_NAME} 已经存在, 跳过创建。`);
  69. }
  70. // 判断有没有用户,如果没有,再创建
  71. await createUserIfNotExists();
  72. }
  73. try {
  74. await createDatabaseIfNotExists();
  75. } catch (err) {
  76. console.error(`初始化数据库失败: ${err.message}`);
  77. } finally {
  78. await connection.end();
  79. }
  80. }
  81. async function main() {
  82. try {
  83. await initDatabase();
  84. app.listen(SERVER_PORT, () => {
  85. console.log(`Marsview服务已启动 ${SERVER_HOST}:${SERVER_PORT}`);
  86. });
  87. } catch {
  88. process.exit(1);
  89. }
  90. }
  91. main();