servidor.js
const dotenv = require("dotenv"); const connectDatabase = require("./config/database"); const cloudinary = require("cloudinary"); // Handling uncaught errors process.on("uncaughtException", (err) => { console.log(`Error: $(err.message)`); console.log("Shutting down server due to uncaught exception"); process.exit(1); }); //config dotenv.config({ path: "backend/config/config.env" }); //connecting to database connectDatabase(); cloudinary.config({ cloud_name: process.env.CLOUDINARY_NAME, api_key: process.env.CLOUDINARY_API_KEY, api_secret: process.env.CLOUDINARY_API_SECRET, }); const server = app.listen(process.env.PORT, () => { console.log(`server is working on ${process.env.PORT}`); }); //unhandled promise rejection process.on("unhandledRejection", (err) => { console.log(`Error: ${err.message}`); console.log("Shutting down server due to unhandled promise rejection"); server.close(() => { process.exit(1); }); });base de datos.js
const { connect } = require("net"); const connectDatabase = () => { mongoose .connect(process.env.DB_URI, { useNewUrlParser: true, useUnifiedTopology: true, }) .then((data) => { console.log(`Mongodb connected with server ${data.connection.host}`); }); }; module.exports = connectDatabase;config.env
PORT=4000 DB_URI = "mongodb://localhost:27017/Ecommerce"process.env.PORT viene sin definir en lugar de 4000. El mismo problema viene para DB_URI y otras variables de process.env. Si escribo 4000 en lugar de process.env.PORT y "mongodb://localhost:27017/Ecommerce" en lugar de process.env.DB_URI, funciona bien. A continuación se muestra el error en mi terminal.
el servidor está trabajando en un error indefinido: el parámetro uri para openUri() debe ser una cadena, obtuvo "indefinido". Asegúrese de que el primer parámetro de mongoose.connect() o mongoose.createConnection() sea una cadena. Apagando el servidor debido a un rechazo de promesa no manejado
¿Cómo puedo resolver este problema?
No configure este tipo de path: "backend/config/config.env" de una ruta en su código: depende del process.cwd() y puede cambiar según dónde ejecute su comando node.js. No es determinista en absoluto.
Use la ruta relativa al server.js en su lugar:
const path = require('path') dotenv.config({ path: path.join(__dirname, "./config/config.env") });Supongo que su árbol de directorios es:
/backend - server.js - /config - config.env