main.js 3.3 KB

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