我已经开始使用mongojs查看socket.io和一些MongoDB。
总结:客户端不通过socket.io向服务器发送数据所以mongojs没有任何东西可以查找,只是返回集合中的第一个文档,我希望它返回null或false所以我可以采取适当的行动。 任何帮助表示感兴趣,对node.js和这一点非常新。
我需要一个登录功能,但当我点击我登录的链接时,应该从客户端运行:
<script>
var socket = io.connect('http://localhost:13163');
socket.on('connect', function () {
socket.emit(console.log('Client connected'));
});
socket.on('queryResponse', function (res, err) {
if (res == "[object Object]") {
console.log('EMPTY OBJ SERVER: ' + res + ' ' + err);
}
else{
console.log('IF NOT EXEC' + res[0].email)
}
});
//socket.send('client hello');
//pageload
$(function () {
$('#login').click(function () {
var username = $('#username').val();
var password = $('#password').val();
if (!username || !password) {
event.preventDefault();
console.log('Need data in both fields');
}
else {
event.preventDefault();
socket.emit('querydata', function (username, password) {
console.log("CLIENT: Querying server for data...");
});
}
});
});
</script>
这应该将用户名和密码发送到服务器,然后运行它:
socket.on('querydata', function (user_username, user_password) {
db.users.find({email: user_username, pass: user_password}, function (err, docs) {
if (err || !docs) {
socket.emit('queryResponse', 'No users found', err);
console.log('if - ' + docs[0].email);
}
else {
socket.emit('queryResponse', docs);
console.log('else - ' + docs[0].email + 'user_password' + user_password + 'user_username' + user_username);
}
});
});
这有点奇怪的是,它只找到该集合的第一个文档。 我刚刚发现'user_username'和'user_password'重载是未定义的,这只是我身边的一些迟钝错误吗?
答案 0 :(得分:2)
你做错了。首先,我看到你的代码中出现了几个错误。 第一个在这里
if (res == "[object Object]")
您无法以这种方式控制响应内容。您可能在javascript调试器中看到[object Object]
字符串。您必须根据服务器响应作为json数据进行此比较。如果它会给您带来麻烦,您可以使用JSON.parse(响应)。
第二个,您实际上不会向服务器发送用户名和密码。你必须使用
socket.emit('querydata', { username: username, password: password }, function (data) {
// Server Ack here
}
而不是
socket.emit('querydata', function (username, password) ...
试试这个
socket.emit('queryResponse', {err: 'No User Found'});
的实例
socket.emit('queryResponse', 'No User Found', err);
在您的客户端中,将响应检查为
if(response.hasOwnProperty('err')) / /Handle error
在你的客户端queryResponse
监听器中,试试这个;
socket.on('queryResponse', function (res) {
if(res.hasOwnProperty('err')) / Handle Error
else // You have an array in `res`
});