Files
miriamgemeinde/config/database.js

70 lines
1.9 KiB
JavaScript

const { Sequelize } = require('sequelize');
require('dotenv').config();
const envName = process.env.NODE_ENV || 'development';
const fileConfig = require('./config.json')[envName];
if (!fileConfig) {
throw new Error(
`[DB] Kein Eintrag in config/config.json für NODE_ENV="${envName}".`
);
}
const database = process.env.DB_NAME || fileConfig.database;
const username = process.env.DB_USER || fileConfig.username;
const password =
process.env.DB_PASSWORD === undefined ? fileConfig.password : process.env.DB_PASSWORD;
const host = process.env.DB_HOST || fileConfig.host;
const sequelizeOptions = {
host,
dialect: fileConfig.dialect || 'mysql',
dialectOptions: fileConfig.dialectOptions,
retry: {
match: [
/ConnectionError/,
/SequelizeConnectionError/,
/SequelizeConnectionRefusedError/,
/SequelizeHostNotFoundError/,
/SequelizeHostNotReachableError/,
/SequelizeInvalidConnectionError/,
/SequelizeConnectionTimedOutError/,
],
max: 5,
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
},
logging: process.env.DB_LOGGING === '1' ? console.log : false,
};
if (process.env.DB_PORT) {
sequelizeOptions.port = parseInt(process.env.DB_PORT, 10);
} else if (fileConfig.port) {
sequelizeOptions.port = fileConfig.port;
}
const sequelize = new Sequelize(database, username, password, sequelizeOptions);
async function connectWithRetry() {
try {
await sequelize.authenticate();
console.log(
`[DB] Verbindung OK — host=${host} database=${database} user=${username} (NODE_ENV=${envName})`
);
} catch (error) {
console.error('[DB] Verbindung fehlgeschlagen:', error.message);
console.error(
`[DB] Erwartete Quelle: config/config.json → "${envName}" oder Umgebungsvariablen DB_HOST, DB_USER, DB_PASSWORD, DB_NAME`
);
setTimeout(connectWithRetry, 5000);
}
}
connectWithRetry();
module.exports = sequelize;