MongoDB赢得't第一次返回正确的数据
MongoDB won't return correct data first time round
这是我的代码:
// Modules
var mongodb = require('mongodb');
var MongoClient = mongodb.MongoClient;
var url = 'mongodb://localhost:27017/affinity';
window.$ = window.jQuery = require('jquery');
var user_data;
$(document).ready(function () {
// Look through db for user
// Flters through the db to find the user and their password to authenticate them in.
userInfo = function (db, callback) {
var username = $('#username').val();
var password = $('#password').val();
var users = db.collection('users');
// Searches through each user in the db to find one which meets conitions.
var cursor = users.find({
"username": username
}, {"limit": 1} ).each(function (err, doc) {
if (doc != null) {
if (doc.password === password) {
user_data = doc;
//window.location.replace(__dirname + '/assets/views/main.html');
} else {
$("#error-hint").css(
'visibility', 'visible'
);
}
} else {
// Skip user if it isn't matching
}
});
console.log(user_data);
}
// Connects to database.
// Inserts all user data to the database.
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Couldn''t connect to the mongoDB server. 'nERROR: ' + err);
} else {
var collection = db.collection('users');
// When login button run authUser function
$('#auth-btn').click(function () {
userInfo(db, function () {
db.close();
});
});
}
});
});
问题是,当我单击按钮以使用正确的信息对用户进行身份验证时,它会返回一个值"undefined",但如果我第二次按下按钮,它会从数据库中返回正确的数据,而不会更改任何内容。我想让它第一次显示以正确验证中的用户。我做错了什么?请帮忙。
您的意思是console.log(user_data);
返回undefined
数据?
这是因为您没有在回调中调用它,所以第一次调用console.log(user_data);
时,数据库查询没有找到用户。当您第二次调用它时,第一个数据库查询完成,因此user_data
已经设置,因此它将打印给您。尝试在第二次按下登录按钮时查找另一个用户。它将打印第一个用户的数据。
请注意,您的调用是异步的!因此,为了在查询完成时查看查询结果,只需将console.log(user_data);
放入传递给each
的回调函数中即可。
此外,如果希望将结果集限制为仅一个元素,请使用db.collection.fidnOne({...})
而不是db.collection.find({...},{limit...}).each(...)
。
相关文章:
- AJAX调用并在Node中获取返回数据
- 角度服务未返回数据
- 统计ajax返回数据中的html元素
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- Imgur API图像搜索未返回数据
- javascript对象显示为null,但object.properties返回数据
- 如何从ajax调用JQuery返回数据
- 试图从嵌套的回调函数返回数据
- NodeJS FS 不从多个文件返回数据
- ajax函数未在C#中返回数据
- 如何在公共js模块中从web服务返回数据
- 将字符串与 JSON 对象组合以返回数据
- 嵌套异步函数未及时返回数据的问题
- NodeJS JSONStream 以一个长字符串的形式返回数据
- 如何使用 HTML 图像请求将数据发送到服务器,或返回数据作为响应
- 从 Angular 模态服务中的模态主体模板返回数据
- jQuery 每个循环返回数据两次
- $.getJSON 在返回数据后不会运行函数
- 如何访问返回数据中的特定json值
- 工厂返回数据后未设置角度$scope