请帮助我理解如何解决这个问题。
这是我的路线文件(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)
})
}
,这是我的控制器文件(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
}
并在控制台中按如下方式打印结果:
----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 }
而不是按照正确的顺序打印,类似这样的内容:
----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
谢谢!
答案 0 :(得分:0)
你的findOne函数需要花时间从数据库中获取数据,因此它不会停止逻辑执行的流程,因为: -
所以,你可以这样做: -
this.finish()
当你的结果来自数据库
时,你想要做的所有事情都是这样做的答案 1 :(得分:0)
您需要回调机制。 NodeJS是基于事件的nonBlockingIO。因此,在执行DB调用之前,您的控件不会停止,因此在从DB获得结果之前返回info
变量
如果您需要更多帮助,请与我们联系。
您的控制器功能应如下所示
'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
};
您的路线文件应如下所示
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)
}
});
})
};