0

我已经开始使用 mongojs 查看 socket.io 和一些 MongoDB。

摘要:客户端不通过 socket.io 向服务器发送数据,因此 mongojs 无需查找任何内容,只返回集合中的第一个文档,我希望它返回 null 或 false,以便我可以采取适当的措施。任何帮助表示赞赏,对 node.js 和 this 来说非常新。

我需要一个登录功能,但是当我单击我登录的链接时,它应该从客户端运行:

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

4

1 回答 1

2

你这样做是不对的。乍一看,我发现您的代码中有几个错误。第一个在这里

if (res == "[object Object]") 

您无法以这种方式控制响应内容。您可能会[object Object]在 javascript 调试器中看到字符串。您必须根据服务器响应作为 json 数据进行此比较。如果它会给你带来麻烦,你可以使用 JSON.parse(response)。

第二个,您实际上并没有将用户名和密码发送到服务器。你必须使用

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`
    });
于 2012-11-15T11:00:40.463 回答