Skip to main content

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,
})