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

131
Visualizações
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!

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

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

over 4 years ago · Santiago Trujillo Relatório

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) } }); }) };
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