El error en la terminal
:\Users\HOPE\Tutorial_API\node_modules\mongoose\lib\connection.js:694 throw new MongooseError('El parámetro uri para openUri() debe ser ' + ^
MongooseError: el parámetro uri para openUri() debe ser una cadena, tiene "indefinido". Asegúrese de que el primer parámetro de mongoose.connect() o mongoose.createConnection() sea una cadena. en NativeConnection.Connection.openUri (C:\Users\HOPE\Tutorial_API\node_modules\mongoose\lib\connection.js:694:11) en C:\Users\HOPE\Tutorial_API\node_modules\mongoose\lib\index.js: 380:10 en C:\Users\HOPE\Tutorial_API\node_modules\mongoose\lib\helpers\promiseOrCallback.js:41:5 en new Promise () enpromiseOrCallback (C:\Users\HOPE\Tutorial_API\node_modules\mongoose\lib \helpers\promiseOrCallback.js:40:10) en Mongoose._promiseOrCallback (C:\Users\HOPE\Tutorial_API\node_modules\mongoose\lib\index.js:1225:10) en Mongoose.connect (C:\Users\HOPE \Tutorial_API\node_modules\mongoose\lib\index.js:379:20) en connectDatabase (C:\Users\HOPE\Tutorial_API\config\db.js:5:14) en Object. (C:\Users\HOPE\Tutorial_API\server.js:7:23) en Module._compile (nodo:internal/modules/cjs/loader:1105:14)
mi archivo server.js
const express = require('express'); const health = require('./routes/healthChecker.routes'); const app = express(); require('./config/db')(); app.use(express.json()); app.use('/health', health) const port = process.env.PORT || 3000 app.listen(port, () => { console.log(`Listening on port ${port}`) });mi archivo de base de datos
const mongoose = require('mongoose'); const connectDatabase = () => { mongoose.connect(process.env.DB_LOCAL_URI, { useUnifiedTopology: true }) .then((con) => { console.log(`MongoDB Database connected to host ${con.connection.host}`); }); } module.exports = connectDatabase;mi archivo predeterminado.json
{ "values": { "url": "http://localhost:3000/", "DB_LOCAL_URI": "mongodb://localhost:27017/" } }¿Cuál podría ser el problema?
Creo que estás mezclando dos formas de incluir variables de entorno.
La primera forma es la que ha elegido : usar un archivo default.json que usa el paquete config npm
npm i config
const config = require('config'); luego puede usar parámetros de su archivo default.json de esta manera:
config.get('values.DB_LOCAL_URI');es decir.
const mongoose = require('mongoose'); const connectDatabase = () => { mongoose.connect(config.get('values.DB_LOCAL_URI'), { useUnifiedTopology: true }) .then((con) => { console.log(`MongoDB Database connected to host ${con.connection.host}`); }); } module.exports = connectDatabase; La segunda forma es usar un archivo .env que vive en el directorio de su archivo de nodo como se ve así:
URL = "http://localhost:3000/" DB_LOCAL_URI = "mongodb://localhost:27017/" Instale el paquete dotenv :
npm i dotenv
Accede a su archivo .env con una declaración requerida en su archivo server.js (que hace referencia a su archivo de base de datos):
servidor.js
require('dotenv').config();y luego usando este patrón:
process.env.DB_LOCAL_URIcomo esto:
const mongoose = require('mongoose'); const connectDatabase = () => { mongoose.connect(process.env.DB_LOCAL_URI), { useUnifiedTopology: true }) .then((con) => { console.log(`MongoDB Database connected to host ${con.connection.host}`); }); } module.exports = connectDatabase; En resumen, usó el patrón ( process.env.MYVARIABLE ) del segundo método, mientras intenta acceder al archivo de configuración/ambiente ( default.json ) usando el primer método.