2025-08-25 15:00:46 +08:00
|
|
|
|
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';
|
2025-09-12 20:08:42 +08:00
|
|
|
|
config.port = process.env.DB_PORT || 9527;
|
2025-08-25 15:00:46 +08:00
|
|
|
|
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(
|
2025-09-12 20:08:42 +08:00
|
|
|
|
process.env.DB_NAME || 'nxxmdata',
|
2025-08-25 15:00:46 +08:00
|
|
|
|
process.env.DB_USER || 'root',
|
2025-09-12 20:08:42 +08:00
|
|
|
|
process.env.DB_PASSWORD || 'aiotAiot123!',
|
2025-08-25 15:00:46 +08:00
|
|
|
|
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;
|