Actualmente estoy creando una nueva API con MongoDB y Express, y actualmente tengo este "mensaje" de problema:
"errorMongooseError: el almacenamiento en búfer de Operation
userinfos.insertOne()se agotó después de 10000 ms"
Esta es la forma en que configuro mis llamadas API:
const express=require('express'); const router=express.Router(); const Userinfo=require("../Models/Userinfo") router.get('/',(req,res)=>{ res.send("we are Post") }); router.get('/Specic', async(req,res)=>{ try{ const data=await Userinfo.find(); console.log(data); res.json(data) } catch(err) { res.json({message:err}) } }) router.post("/",(req,res)=>{ const test= new Userinfo({ "Fname":req.body.Fname, "Lname":req.body.Lname }); console.log(test); test.save().then(data=>{ res.json(data); }).catch((err)=>{res.json({message:"error"+err})}) }) module.exports=router;Model Definiendo así Userinfo.js
const mongoose=require('mongoose'); /*const PoistSchema=mongoose.Schema({ Fname:String, Lname:String, DOB:Date.now() });*/ const PostSchema=mongoose.Schema({ Fname:{ type:String, require:true }, Lname:{ type:String, require:true }, DOB:{ type:String, default:Date.now }, }); module.exports=mongoose.model("Userinfo",PostSchema)Aplicación.js
const express=require('express'); const app=express(); const mongoose=require('mongoose'); require("dotenv/config"); const bodyParser=require("body-parser") ///Middlewares //app.use(auth); app.use(bodyParser.json()); const postroutes=require("./Routes/Posts"); app.use("/post",postroutes) app.get('/',(req,res)=>{ res.send("we are om") }) app.get('/posts',(req,res)=>{ res.send("we are Post") }) try { mongoose.connect(process.env.DBConnection,{useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex:true},()=>{ console.log("Sucess"); },(error)=>{ console.log(error); }); console.log("ConnectedZZ") } catch (error) { console.log(error); } app.listen(3000);¿Hay alguna sugerencia para insertar y obtener datos? Al obtener datos, no se obtiene ningún error.
Puede haber varias razones por las que se produjo este problema, pero comencemos con:
Como podemos leer en documentos
Mongoose le permite comenzar a usar sus modelos de inmediato, sin esperar a que Mongoose establezca una conexión con MongoDB. Esto se debe a que la función del modelo de búfer mongoose llama internamente. Este almacenamiento en búfer es conveniente, pero también una fuente común de confusión. Mongoose no arrojará ningún error de forma predeterminada si usa un modelo sin conectarse.
Entonces parece que su model está siendo llamado antes de que se establezca la conexión. Para manejar este error, debe usar .catch() o probar/atrapar con async/ await. Eso debería resolver su problema.
Aquí tienes un fragmento de código de ejemplo:
(async () => { try { await mongoose.connect(process.env.DBConnection) console.log('MongoDB connected!!'); } catch (err) { console.log('Failed to connect to MongoDB', err); } })()puede confirmar si la base de datos es correcta antes de llamar a las llamadas de la base de datos.