Configuración
La configuración se carga con @nestjs/config y se inyecta en los módulos usando ConfigService.
Archivos en src/config/
app.config.ts
export default registerAs('app', () => ({
name: process.env.APP_NAME,
env: process.env.APP_ENV,
host: process.env.HOST,
port: parseInt(process.env.PORT, 10),
}));
database.config.ts
export default registerAs('database', () => ({
uri: process.env.MONGODB_URI,
}));
jwt.config.ts
export default registerAs('jwt', () => ({
secret: process.env.JWT_SECRET,
expiresIn: process.env.JWT_EXPIRES_IN, // '1d' por defecto
}));
storage.config.ts
export default registerAs('storage', () => ({
endpoint: process.env.STORAGE_ENDPOINT,
accessKey: process.env.STORAGE_ACCESS_KEY,
secretKey: process.env.STORAGE_SECRET_KEY,
bucket: process.env.STORAGE_BUCKET,
region: process.env.STORAGE_REGION,
}));
env.validation.ts
Esquema Joi que valida todas las variables en el arranque. Si falta alguna requerida o tiene formato incorrecto, la aplicación no arranca y muestra qué variable falló.
// Validaciones típicas:
PORT: Joi.number().default(3000),
MONGODB_URI: Joi.string().required(),
JWT_SECRET: Joi.string().required(),
// ...
Uso en módulos
constructor(private configService: ConfigService) {}
const port = this.configService.get<number>('app.port');
const mongoUri = this.configService.get<string>('database.uri');
Registro en app.module.ts
ConfigModule.forRoot({
isGlobal: true,
load: [appConfig, databaseConfig, jwtConfig, storageConfig],
validationSchema: envValidation,
})