const { Sequelize } = require('sequelize'); // 从环境变量获取数据库配置 const dialect = process.env.DB_DIALECT || 'mysql'; const config = { logging: false, define: { timestamps: true } }; // 根据数据库类型配置不同的选项 if (dialect === 'sqlite') { config.storage = process.env.DB_STORAGE || './database.sqlite'; config.dialect = 'sqlite'; } else { config.host = process.env.DB_HOST || '129.211.213.226'; config.port = process.env.DB_PORT || 9527; config.dialect = 'mysql'; config.timezone = '+08:00'; config.define.charset = 'utf8mb4'; config.define.collate = 'utf8mb4_unicode_ci'; config.pool = { max: 5, min: 0, acquire: 30000, idle: 10000 }; } let sequelize; if (dialect === 'sqlite') { sequelize = new Sequelize(config); } else { sequelize = new Sequelize( process.env.DB_NAME || 'nxxmdata', process.env.DB_USER || 'root', process.env.DB_PASSWORD || 'aiotAiot123!', config ); } // 测试数据库连接(最多重试3次) const MAX_RETRIES = 3; let retryCount = 0; const testConnection = async () => { try { await sequelize.authenticate(); console.log('数据库连接成功'); } catch (err) { console.error('数据库连接失败:', err); if (retryCount < MAX_RETRIES) { retryCount++; console.log(`正在重试连接 (${retryCount}/${MAX_RETRIES})...`); setTimeout(testConnection, 5000); // 5秒后重试 } else { console.error('数据库连接失败,应用将使用模拟数据运行'); } } }; // 异步测试连接,不阻塞应用启动 testConnection().catch(() => { console.log('数据库连接测试完成,应用继续启动'); }); module.exports = sequelize;