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.
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
.
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:
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
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=root
MONGO_DB=platzi-store
MONGO_PORT=27017
MONGO_HOST=localhost
MONGO_CONNECTION=mongodb
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,
},
};
});
import { ConfigType } from '@nestjs/config';
import config from '../config';
@Global()
@Module({
providers: [
...
{
provide: 'MONGO',
useFactory: async (configService: ConfigType<typeof config>) => {
const {
connection,
user,
password,
host,
port,
dbName,
} = configService.mongo;
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],
},
],
exports: ['API_KEY', 'MONGO'],
})
export class DatabaseModule {}
驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?