Variables de Entorno para Configuración de MongoDB en Node.js
Clase 9 de 24 • Curso de NestJS: Persistencia de Datos con MongoDB
Contenido del curso
Database
- 4

Configuración y ejecución de MongoDB con Docker Compose
08:51 min - 5

Conexión a Base de Datos MongoDB con Mongo Compass
05:05 min - 6

Instalación y conexión de MongoDB en Node con driver oficial
06:59 min - 7

Inyección de Conexiones MongoDB en Servicios NestJS
06:57 min - 8

Consultas a MongoDB con Nest.js: Implementación de Endpoints
04:46 min - 9

Variables de Entorno para Configuración de MongoDB en Node.js
Viendo ahora
Mongoose
- 10

Instalación y Configuración de Mongoose con NestJS
07:52 min - 11

Definición de Esquemas en Mongoose para eCommerce con NestJS
07:45 min - 12

Operaciones CRUD con MongoDB y Node.js en un Servicio de Productos
09:29 min - 13

Creación, actualización y eliminación de productos en MongoDB
10:12 min - 14

Validación de MongoID con Pipes en NestJS
06:38 min - 15

Paginación en MongoDB con DTOs y Validaciones en NestJS
11:13 min - 16

Consultas Avanzadas con Rangos de Precios en MongoDB
07:30 min - 17

Indexación en MongoDB: Cómo optimizar consultas rápidas
03:11 min
Relaciones en MongoDB
- 18

Relaciones embebidas en MongoDB: Manejo y ejemplos prácticos
07:55 min - 19

Relaciones uno a uno referenciadas en MongoDB
12:20 min - 20

Relaciones Uno a Muchos en MongoDB: Arrays Embebidos vs Referenciados
09:28 min - 21
Tipado de Documentos Embebidos en NestJS con Mongoose
01:49 min - 22

Relaciones Uno a Muchos Referenciadas en MongoDB
14:36 min - 23

Manipulación de Arrays en E-commerce: Métodos y Endpoints
13:08 min
Próximos pasos
Trabajar con variables de entorno será siempre la forma más correcta y segura de pasarle a nuestra aplicación los datos sensibles de conexión a bases de datos o claves secretas.
Pasaje de variables de entorno en NestJS
Veamos cómo se realiza la configuración de variables de entorno en NestJS.
Paso 1: instalación de NestJS Config
Asegúrate de instalar la dependencia npm i --save @nestjs/config. Esta te permitirá crear en la raíz de tu proyecto el archivo .env, que contendrá las variables de entorno que tu aplicación necesita.
# .env
MONGO_BBDD=nestjs_mongo
MONGO_CONF=mongodb
MONGO_HOST=localhost:27017
MONGO_PASS=secret
MONGO_USER=mongo
Revisa el módulo de configuración para programación modular.
Paso 2: importación de las variables de entorno
Importa el ConfigModule en el módulo principal de tu aplicación para leer correctamente el archivo .env.
// app.module.ts
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot(),
]
})
export class AppModule {}
Paso 3: utilización de las variables de entorno
De esta manera, ya tienes disponible en tu aplicación para utilizar las variables de entorno que hayas definido en el archivo .env a través del objeto global de NodeJS process de la siguiente manera:
Tu cadena de conexión de MongoDB:
mongodb://mongo:secret@localhost:27017/nestjs_mongo
Podría quedar de la siguiente manera:
`${process.env.MONGO_CONF}://${process.env.MONGO_USER}:${process.env.MONGO_PASS}@${process.env.MONGO_HOST}/${process.env.MONGO_BBDD}`,
Recuerda no versionar en el repositorio de tu proyecto el archivo .env que contiene datos sensibles como contraseñas o accesos privados. Tu aplicación está lista para conectarse a múltiples ambientes de desarrollo a través de variables de ambiente.
Contribución creada por: Kevin Fiorentino.
Código de ejemplo para variables de ambiente en Mongo
// .env, .stag.env, .prod.env
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=root
MONGO_DB=platzi-store
MONGO_PORT=27017
MONGO_HOST=localhost
MONGO_CONNECTION=mongodb
// src/config.ts
import { registerAs } from '@nestjs/config';
export default registerAs('config', () => {
return {
...
mongo: { // 👈
dbName: process.env.MONGO_DB,
user: process.env.MONGO_INITDB_ROOT_USERNAME,
password: process.env.MONGO_INITDB_ROOT_PASSWORD,
port: parseInt(process.env.MONGO_PORT, 10),
host: process.env.MONGO_HOST,
connection: process.env.MONGO_CONNECTION,
},
};
});
// src/database/database.module.ts
import { ConfigType } from '@nestjs/config';
import config from '../config'; // 👈 import config
@Global()
@Module({
providers: [
...
{
provide: 'MONGO',
useFactory: async (configService: ConfigType<typeof config>) => {
const {
connection,
user,
password,
host,
port,
dbName,
} = configService.mongo; // 👈 get mongo config
const uri = `${connection}://${user}:${password}@${host}:${port}/?authSource=admin&readPreference=primary`;
const client = new MongoClient(uri);
await client.connect();
const database = client.db(dbName);
return database;
},
inject: [config.KEY], // 👈 Inject config
},
],
exports: ['API_KEY', 'MONGO'],
})
export class DatabaseModule {}