请帮助我了解如何解决这个问题。
这是我的路由文件 (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)
})
}
这是我的 Controller 文件 (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
谢谢!
最佳答案
您将需要回调机制。 NodeJS 是基于事件的非阻塞 IO。因此,在执行数据库调用之前,您的控制不会停止,因此您的 info
变量会在您从数据库获取结果之前返回
如果您需要更多帮助,请告诉我。
您的 Controller 函数应如下所示
'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)
}
});
})
};
关于javascript - 如何使用 mongoose 尊重 NodeJS 应用程序中的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43623391/