socket.io从mongojs查询返回[object Object]

时间:2012-11-15 10:41:22

标签: node.js mongodb socket.io mongojs

我已经开始使用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'重载是未定义的,这只是我身边的一些迟钝错误吗?

1 个答案:

答案 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`
    });