Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.8K
Visualizações
MongooseError - El almacenamiento en búfer de la operación `users.findOne()` se agotó después de 10000ms

Mi código funcionaba inicialmente, pero no sé por qué dejó de funcionar y me dio este error:

 MongooseError: Operation `users.findOne()` buffering timed out after 10000ms at Timeout.<anonymous> (/Users/nishant/Desktop/Yourfolio/backend/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:184:20) at listOnTimeout (internal/timers.js:549:17) at processTimers (internal/timers.js:492:7)

Estoy tratando de autenticar al usuario iniciando sesión con JWT. Mi cliente funciona bien, pero en mi backend aparece este error. Mi código de fondo:

 import neuron from '@yummyweb/neuronjs' import bodyParser from 'body-parser' import cors from 'cors' import mongoose from 'mongoose' import emailValidator from 'email-validator' import passwordValidator from 'password-validator' import User from './models/User.js' import Portfolio from './models/Portfolio.js' import bcrypt from 'bcryptjs' import jwt from 'jsonwebtoken' import auth from './utils/auth.js' // Dot env import dotenv from 'dotenv' dotenv.config() // Custom Password Specifications // Username Schema const usernameSchema = new passwordValidator() usernameSchema.is().min(3).is().max(18).is().not().spaces() // Password Schema const passwordSchema = new passwordValidator() passwordSchema.is().min(8).is().max(100).has().uppercase().has().lowercase().has().digits().is().not().spaces() const PORT = process.env.PORT || 5000 const neuronjs = neuron() // Middleware neuronjs.use(bodyParser()) neuronjs.use(cors()) // Mongoose Connection mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true }, () => console.log("MongoDB Connected")) // API Routes neuronjs.POST('/api/auth/signup', async (req, res) => { const { username, email, password, passwordConfirmation } = req.body // Validation: all fields are filled if (!username || !email || !password || !passwordConfirmation) { return res.status(400).json({ "error": "true", "for": "fields", "msg": "fill all the fields" }) } // Validation: username is valid if (usernameSchema.validate(username, { list: true }).length !== 0) { return res.status(400).json({ "error": "true", "for": "username", "method_fail": usernameSchema.validate(username, { list: true }), "msg": "username is invalid" }) } // Validation: email is valid if (!emailValidator.validate(email)) { return res.status(400).json({ "error": "true", "for": "email", "msg": "email is invalid" }) } // Validation: password is valid if (passwordSchema.validate(password, { list: true }).length !== 0) { return res.status(400).json({ "error": "true", "for": "password", "method_fail": passwordSchema.validate(password, { list: true }), "msg": "password is invalid" }) } // Validation: password is confirmed if (password !== passwordConfirmation) { return res.status(400).json({ "error": "true", "for": "confirmation", "msg": "confirmation password needs to match password" }) } // Check for existing user with email const existingUserWithEmail = await User.findOne({ email }) if (existingUserWithEmail) return res.status(400).json({ "error": "true", "msg": "a user already exists with this email" }) // Check for existing user with username const existingUserWithUsername = await User.findOne({ username }) if (existingUserWithUsername) return res.status(400).json({ "error": "true", "msg": "a user already exists with this username" }) // Generating salt const salt = bcrypt.genSalt() .then(salt => { // Hashing password with bcrypt const hashedPassword = bcrypt.hash(password, salt) .then(hash => { const newUser = new User({ username, email, password: hash }) // Saving the user newUser.save() .then(savedUser => { const newPortfolio = new Portfolio({ user: savedUser._id, description: "", socialMediaHandles: { github: savedUser.username, dribbble: savedUser.username, twitter: savedUser.username, devto: savedUser.username, linkedin: savedUser.username, } }) // Save the portfolio newPortfolio.save() // Return the status code and the json return res.status(200).json({ savedUser }) }) .catch(err => console.log(err)) }) .catch(err => console.log(err)) }) .catch(err => console.log(err)) }) neuronjs.POST('/api/auth/login', async (req, res) => { try { const { username, password } = req.body // Validate if (!username || !password) { return res.status(400).json({ "error": "true", "msg": "fill all the fields", "for": "fields", }) } const user = await User.findOne({ username }) if (!user) { return res.status(400).json({ "error": "true", "msg": "no account is registered with this username", "for": "username" }) } // Compare hashed password with plain text password const match = await bcrypt.compare(password, user.password) if (!match) { return res.status(400).json({ "error": "true", "msg": "invalid credentials", "for": "password" }) } // Create JWT token const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET) return res.json({ token, user: { "id": user._id, "username": user.username, "email": user.email } }) } catch (e) { console.log(e) } }) // Delete a user and their portfolio neuronjs.DELETE("/api/users/delete", async (req, res) => { auth(req, res) const deletedPortfolio = await Portfolio.findOneAndDelete({ user: req.user }) const deletedUser = await User.findByIdAndDelete(req.user) res.json(deletedUser) }) neuronjs.POST("/api/isTokenValid", async (req, res) => { const token = req.headers["x-auth-token"] if (!token) return res.json(false) const verifiedToken = jwt.verify(token, process.env.JWT_SECRET) if (!verifiedToken) return res.json(false) const user = await User.findById(verifiedToken.id) if (!user) return res.json(false) return res.json(true) }) // Getting one user neuronjs.GET("/api/users/user", async (req, res) => { auth(req, res) const user = await User.findById(req.user) res.json({ "username": user.username, "email": user.email, "id": user._id }) }) // Getting the porfolio based on username neuronjs.GET("/api/portfolio/:username", async (req, res) => { try { const existingUser = await User.findOne({ username: req.params.username }) // User exists if (existingUser) { const userPortfolio = await Portfolio.findOne({ user: existingUser._id }) return res.status(200).json(userPortfolio) } // User does not exist else return res.status(400).json({ "error": "true", "msg": "user does not exist" }) } catch (e) { console.log(e) return res.status(400).json({ "error": "true", "msg": "user does not exist" }) } }) // Update Portfolio info neuronjs.POST("/api/portfolio/update", async (req, res) => { auth(req, res) // Find the portfolio const portfolio = await Portfolio.findOne({ user: req.user }) // Then, update the portfolio if (portfolio) { // Call the update method const updatedPortfolio = await portfolio.updateOne({ user: req.user, description: req.body.description, socialMediaHandles: req.body.socialMediaHandles, greetingText: req.body.greetingText, navColor: req.body.navColor, font: req.body.font, backgroundColor: req.body.backgroundColor, rssFeed: req.body.rssFeed, displayName: req.body.displayName, layout: req.body.layout, occupation: req.body.occupation }) return res.status(200).json(portfolio) } }) neuronjs.listen(PORT, () => console.log("Server is running on port " + PORT))

La función del archivo auth.js:

 import jwt from 'jsonwebtoken' const auth = (req, res) => { const token = req.headers["x-auth-token"] if (!token) return res.status(401).json({ "error": "true", "msg": "no authentication token" }) const verifiedToken = jwt.verify(token, process.env.JWT_SECRET) if (!verifiedToken) return res.status(401).json({ "error": "true", "msg": "token failed" }) req.user = verifiedToken.id } export default auth

Cualquier ayuda es muy apreciada y ya probé algunas soluciones, como eliminar node_modules y volver a instalar mongoose.

over 4 years ago · Santiago Trujillo
12 Respostas
Responde à pergunta

0

En mi experiencia, esto sucede cuando su base de datos no está conectada. Intente verificar las siguientes cosas:

  • ¿Está conectada su base de datos y está apuntando a la misma URL de su código?
  • compruebe si su código mongoose.connect(...) se está cargando.

Enfrenté este problema en el que estaba ejecutando el node index.js desde mi terminal y el código de conexión de mongoose estaba en un archivo diferente. Después de requerir ese código de mangosta en index.js, estaba funcionando nuevamente.

over 4 years ago · Santiago Trujillo Relatório

0

Después de crear un clúster, haga clic en conectar y agregue su IP o agregue otra IP en MongoDB Atlas

over 4 years ago · Santiago Trujillo Relatório

0

Según la documentación que se encuentra en este enlace: https://mongoosejs.com/docs/connections.html#buffering

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.

TL;RD:

Su modelo está siendo llamado antes de que se establezca la conexión. Debe usar async/await con connect() o createConnection(); o use .then() , ya que estas funciones ahora devuelven promesas de Mongoose 5 .

over 4 years ago · Santiago Trujillo Relatório

0

mongoose.connect('mongodb://localhost/myapp', {useNewUrlParser: true});

Simplemente haga esto, agregue {useNewUrlParser: true} en el archivo de conexión.

over 4 years ago · Santiago Trujillo Relatório

0

Yo tuve el mismo problema. En mi caso, mantuve la declaración mongoose.connect en un archivo diferente y olvidé invocarla mientras escribía la declaración requerida.

 require(./services/mongoose);

Hice esto en mi archivo index.js y lo cambié a esto

 require(./services/mongoose)();
over 4 years ago · Santiago Trujillo Relatório

0

Me he encontrado con esto varias veces; particularmente cuando actualicé las dependencias anidadas que requieren mongoose. Esto siempre hace el truco para mí.

 rm -rf node_modules rm package-lock.json npm install --package-lock-only npm install
over 4 years ago · Santiago Trujillo Relatório

0

Mi código funcionó normalmente desde una PC pero desde otra recibí el mismo error. Tengo alojamiento gratuito MongoDB por https://www.mongodb.com/ .

Lo arreglé agregando mi IP actual a Security - Network Access - IP Access List en el servidor de alojamiento.

over 4 years ago · Santiago Trujillo Relatório

0

Este error [ user.findOne() ] se muestra porque la versión de su paquete de config se actualiza automáticamente.

Introduce lo siguiente en tu terminal:

 npm i -E config@3.3.1

o

 yarn add -E config@3.3.1
over 4 years ago · Santiago Trujillo Relatório

0

bueno, mi problema se resolvió porque ya había un clúster, una colección hecha en mi mongo db atlas, todo lo que tenía que hacer era borrar eso y enviar otra solicitud de publicación para que funcione.

over 4 years ago · Santiago Trujillo Relatório

0

Tuve el mismo problema al usar Mongoose 6 . Me conecté a Mongoose en mi archivo index.js de la siguiente manera:

 mongoose.connect( process.env.MONGO_URL, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true }, () => { console.log('Connected to MongoDB'); } );

Encontré la siguiente información para Mongoose 6 en su sitio:

useNewUrlParser, useUnifiedTopology, useFindAndModify y useCreateIndex ya no son opciones compatibles. Mongoose 6 siempre se comporta como si useNewUrlParser, useUnifiedTopology y useCreateIndex fueran verdaderos y useFindAndModify fuera falso. Elimine estas opciones de su código.

Cuando eliminé la opción useCreateIndex: true , el problema se resolvió.

over 4 years ago · Santiago Trujillo Relatório

0

Asegúrese de conectarse a MongoDB en la parte superior de su función (archivo interno) y realizar operaciones (CRUD) después de conectarse a MongoDB Atlas.

Espero que tenga sentido. Recibí un error porque en mi archivo estoy cargando datos de otro servidor e insertándolos en mi MongoDB después de las operaciones asincrónicas que estoy conectando a mi servidor MongoDB, es por eso que recibí un error.

CORRECTO ↓

-

 await mongoose.connect(MONGO_URL, { useNewUrlParser: true, useUnifiedTopology: true, }); await parseAndLoadPlanetsData();

INCORRECTO ↓

-

 await parseAndLoadPlanetsData(); await mongoose.connect(MONGO_URL, { useNewUrlParser: true, useUnifiedTopology: true, });
over 4 years ago · Santiago Trujillo Relatório

0

Acabo de tener este problema cuando traté de usar mi base de datos mientras mi servidor tenía un error y mongoose creó un enorme panel de error de 87 partes que tuve que revisar y cuando lo hice, descubrí que las opciones que pasé a mongoose eran depreciado Entonces, si puede desplazarse hasta donde inicia su servidor, es posible que vea detalles que le indican que elimine o agregue ciertas opciones. Eliminar las opciones adicionales solucionó mi problema. Evidencia fotográfica de mi problema y dónde lo encontré en la terminal

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda