我是node和mongodb的新手,所以我不知道如何获取这些数据。我总是得到未定义,我已经读过,因为它是异步的,我知道是重复的,但我无法弄明白。
我已经创建了一个控制台记录结果的函数,但我无法在此函数中设置var,只需控制台记录该值。
这是与数据库建立连接的功能
var findUser = function (mail) {
MongoClient.connect(url, function (err, db) {
if(err) {
console.log('ha habido un problema al conectar', err);
} else {
console.log('connected');
var collection = db.collection('users')
.find({email : mail}).toArray(function (err, result) {
if (err) {
finded(err);
} else if(result.length) {
finded(result);
} else {
finded(false);
}
db.close;
});
}
});
};
这是接收数据的那个
var finded = function(findedUser){console.log(findedUser)};
但我希望将数据放在变量中,这样我就可以读出类似
的内容var finded = function(findedUser){user = findedUser};
其中user是全局变量,因此我可以使用类似if(user.lenght)
我讨厌当我找到一个问题并且没有最终答案时,所以我最终做的是创建一个承诺并将其全部包含在内,如下所示:
function findUserPromise(mail) {
return new Promise(function(resolve, reject) {
MongoClient.connect(url, function (err, db) {
if(err) {
console.log('ha habido un problema al conectar', err);
} else {
var collection = db.collection('users')
.find({email : mail}).toArray(function (err, result) {
if (err) {
resolve(err);
} else if(result.length) {
resolve(result);
} else {
resolve(false);
}
db.close;
});
}
});
});
};
,用法是
findUserPromise(username).then(function(result) {
if (result == false) {
console.log('not finded');
} else {
var decryptPass = decrypt(result[0].password);
if (decryptPass == password) {
done(null, { username: result[0].email, name: result[0].name });
} else {
done(null, null);
}
}
}).catch(function(err) {
err;
});