Configuration management — manage app settings across environments.
1// config.js2const Joi = require("joi");34const envSchema = Joi.object({5 NODE_ENV: Joi.string().valid("development", "production", "test").required(),6 PORT: Joi.number().default(3000),7 DATABASE_URL: Joi.string().uri().required(),8 REDIS_URL: Joi.string().uri().required(),9 JWT_SECRET: Joi.string().min(32).required(),10 SMTP_HOST: Joi.string().required(),11 SMTP_PORT: Joi.number().default(587),12}).unknown();1314const { error, value: envVars } = envSchema.validate(process.env, {15 abortEarly: false,16});1718if (error) {19 throw new Error(`Config validation error: ${error.message}`);20}2122const config = {23 env: envVars.NODE_ENV,24 port: envVars.PORT,25 db: {26 url: envVars.DATABASE_URL,27 },28 redis: {29 url: envVars.REDIS_URL,30 },31 jwt: {32 secret: envVars.JWT_SECRET,33 },34 smtp: {35 host: envVars.SMTP_HOST,36 port: envVars.SMTP_PORT,37 },38};3940module.exports = config;4142// Usage43const config = require("./config");44app.listen(config.port);45const db = new Pool({ connectionString: config.db.url });