Estoy tratando de usar el método de recopilación, pero parece que realmente no puedo usarlo como db.colección ya que db está llamando a connectDB y connectDB es en realidad una promesa que devuelve conn, que es mi mongoURI. Mi pregunta es ¿qué podría usar para poder llamar al método de recopilación con mi mongoURI para enviar los datos desde el front-end a la base de datos?
este es mi archivo db.js
const mongoose = require("mongoose"); const connectDB = async () => { try { const conn = await mongoose.connect(process.env.MONGO_URI, { useUnifiedTopology: true, useNewUrlParser: true, }); console.log(`MongoDB Connected : ${conn.connection.host}`); return conn; } catch (err) { console.error(err.message); process.exit(1); } }; module.exports = connectDB;index.js (donde estoy usando el método de recopilación):
const express = require("express"); const cors = require("cors"); // Importing cors var request = require("request"); const dotenv = require("dotenv"); const port = 5000; var util = require("util"); const connectDB = require("./config/db"); require("dotenv").config({ path: "./config/config.env" }); const app = express(); dotenv.config(); const db = connectDB(); app.get("/", (req, res) => { res.send("Hey there!"); }); app.get("/Pinged", function (req, res) { res.send("Pinged!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); }); app.use(cors({ origin: "*" })); app.post("/stored", (req, res) => { console.log("its running 2: " + req.body); db.collection().insertOne(req.body, (err, data) => { if (err) return console.log(err); res.send("saved to db: " + data); }); }); app.listen(port, () => console.log(`Example app listening on port ${port}!`));Es posible que haya algunos errores en el código, ya que no trabajo en el back-end con demasiada frecuencia, así que hágamelo saber si hay alguno.
Si está utilizando una versión lo suficientemente reciente de Node.js que admite await de nivel superior, simplemente await la llamada a la función async :
const db = await connectDB(); Alternativamente, si no puede usar la await de nivel superior, puede resolver la Promesa cuando lo necesite. Por ejemplo:
app.post("/stored", (req, res) => { console.log("its running 2: " + req.body); db.then(conn => { conn.collection().insertOne(req.body, (err, data) => { if (err) return console.log(err); res.send("saved to db: " + data); }); }); }); No estoy 100 % seguro de manejar estas conexiones, y otra opción podría ser eliminar la llamada de nivel superior a connectDB() por completo e invocarla en cada solicitud:
app.post("/stored", (req, res) => { console.log("its running 2: " + req.body); connectDB().then(db => { db.collection().insertOne(req.body, (err, data) => { if (err) return console.log(err); res.send("saved to db: " + data); }); }); });