我真的需要帮助,我花了很多时间试图理解,但我不明白。 我使用的是nodeJS和MongoDB
我想做一个函数,根据电子邮件是否在数据库中返回true或false:
我已经做到了
function isUserRegistered(email) {
MongoClient.connect(url, function (err, db) {
if (err) throw err;
let database = db.db(dataBaseName);
let query = { "email": email };
var userCollection = database.collection(collectionName)
userCollection.find(query).toArray(function (err, result) {
if (err) throw err;
db.close();
if (result.length > 0) {
return true;
} else {
return false;
}
});
});
}
console.log(isUserRegistered("jack@gmail.com").toString());
但是当我测试时,它不能工作,因为在我尝试打印它时,isUserRegistered()是未定义的。 我曾经尝试过做回调函数,我实现了打印“false”或“true”,但是对于回调函数,我只是启动了一个新函数,并且isUserRegister()不返回布尔值,所以我不能在以后的程序中做类似的事情:
if (isUserRegister(email){
// Try to login
} else {
// try to create the account
}
我也在寻找异步并等待,但我不知道应该在哪里使用它。 能用简单的方法固定吗?
谢谢
问题是您不能直接从回调中返回值(更多信息请参见此)。
由于NodeJS MongoClient支持开箱即用的承诺,因此可以非常容易地用async/await
重写和简化代码。 注意,这仍然需要错误处理,但它应该给您一个开始:
async function isUserRegistered(email) {
const client = await MongoClient.connect(url);
const db = client.db(dataBaseName);
const query = {
"email": email
};
const result = await db.collection(collectionName).find(query).toArray();
if (result.length > 0) {
return true;
} else {
return false;
}
}
(async () => {
console.log(await isUserRegistered("jack@gmail.com"));
})();