Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

140
Vistas
Cómo respetar el orden de ejecución en la aplicación NodeJS con mongoose

por favor ayúdame a entender cómo puedo resolver esto.

este es mi archivo de rutas (auth-routes.js)

 const userControllers = require('../controllers/user') module.exports = function(app){ app.post('/auth/recuperarpassword', function(req, res){ var info = userControllers.recuperarPassword(req, res) console.log('---------------->there is in routes file-->' + info); res.status(500).send(info) }) }

y este es mi archivo de controlador (user.js)

 'use strict' const User = require('../models/user') const bcrypt = require('bcrypt-nodejs') var momenttz = require('moment-timezone'); var mongoose = require('mongoose') function recuperarPassword(req,res){ var username = req.body.username.toLowerCase().trim(); console.log('----username:---->' + username + '<---------------'); var info; User.findOne({username: username}, function(err,user){ console.log('Dentro del findOne'); if (err) { console.log('--->Error - Error al buscar username en BD') return err } console.log('------>user:-->'+ user); }) console.log('Salio del FinOne'); info = {descerror: 'Elcomercio '} return info } module.exports = { recuperarPassword }

y en la consola los resultados se imprimen así:

 ----username:---->cesar4@mail.com<--------------- Salio del FinOne ---------------->Ya esta en routes-->[object Object] POST /auth/recuperarpassword 500 42.647 ms - 27 Dentro del findOne ------>user:-->{ _id: 58fe681cb615c91f9d71adfb, username: 'cesar4@mail.com', password: 'hash', __v: 0 }

en lugar de imprimir en el orden correcto, algo similar a esto:

 ----username:---->cesar4@mail.com<--------------- Dentro del findOne ------>user:-->{ _id: 58fe681cb615c91f9d71adfb, username: 'cesar4@mail.com', password: 'hash', __v: 0 } Salio del FinOne ---------------->Ya esta en routes-->[object Object] POST /auth/recuperarpassword 500 42.647 ms - 27

¡Gracias!

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

su función findOne toma tiempo para obtener los datos de la base de datos para que no detenga el flujo de la ejecución de la lógica porque: -

  • El nodo Js es un hilo único que no se detiene. Todo lo que puede lograr en las funciones de devolución de llamada.
  • Es un modelo de E/S sin bloqueo

Entonces, puedes hacerlo así: -

 exports.recuperarPassword = function(req, res) { var username = req.body.username.toLowerCase().trim(); console.log('----username:---->' + username + '<---------------'); User.findOne({ username: username }, function(err, user) { console.log('Dentro del findOne'); if (err) { console.log('--->Error - Error al buscar username en BD') return err; } console.log('------>user:-->' + user); console.log('Salio del FinOne'); user.info= { descerror: 'Elcomercio ' }; //if you want to use info object return user; }); };

Todas las cosas que desea hacer simplemente hágalo cuando el resultado provenga de la base de datos

about 4 years ago · Santiago Trujillo Denunciar

0

Necesitará un mecanismo de devolución de llamada. NodeJS no es BlockingIO basado en eventos. Por lo tanto, su control no se detendrá hasta que se ejecute la llamada DB, por lo tanto, su variable de info se devuelve antes de obtener el resultado de DB

Avísame si necesitas más ayuda con esto.

Su función de controlador debería verse así

 'use strict' const User = require('../models/user') const bcrypt = require('bcrypt-nodejs') var momenttz = require('moment-timezone'); var mongoose = require('mongoose') function recuperarPassword(req,res, callback){ var username = req.body.username.toLowerCase().trim(); console.log('----username:---->' + username + '<---------------'); var info; User.findOne({username: username}, function(err,user){ console.log('Dentro del findOne'); if (err) { console.log('--->Error - Error al buscar username en BD'); callback(false); return err } console.log('------>user:-->'+ user); callback(user) }); } module.exports = { recuperarPassword };

Su archivo de ruta debería verse así

 const userControllers = require('../controllers/user') module.exports = function(app){ app.post('/auth/recuperarpassword', function(req, res){ userControllers.recuperarPassword(req, res, function(data){ if(data === false){ //there was error in your controller DB call }else{ console.log('---------------->there is in routes file-->' + data); res.status(500).send(data) } }); }) };
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda