javascript - Socket.IO - 回调仅发出的用户

标签 javascript node.js socket.io

我正在制作一个需要用户登录的聊天应用程序,到目前为止,我已经设法使用 UserApp.io 使登录系统正常工作,但我似乎找不到一种将“回调”发送回的方法向服务器发送信息的用户。

因此,对于index.html,当提交登录表单时,它会收集两个字段的值并将数据发送到后端。

$('form#login').submit(function() {
    var data = {};

    data.email = $("#login_email").val();
    data.password = $("#login_password").val();

    socket.emit('user login', data);
});

index.js 文件中,它接收详细信息并使用 UserApp API 检查用户是否有效以及所有详细信息是否正确。它还检索名字和姓氏等信息。

socket.on('user login', function (user) {
    logger.info('Receiving login info for "' + user.email + '"...');

    UserApp.User.login({"login": user.email, "password": user.password}, function (error, result) {
        if (error) {
            logger.error('Login failed: ' + error.message);
        } else {
            var userToken = result.token;
            var userID = result.user_id;
            console.log("User has logged in.");

            UserApp.User.get({
                "user_id": userID
            }, function (error, result) {
                if (error) {
                    logger.error(error.message);
                } else {
                    logger.info(result[0]['first_name'] + " " + result[0]['last_name'] + " Has logged in!")
                }
            });
        }
    });
});

这是我的问题。我似乎找不到一种方法来回调index.html,因此它可以显示“用户名不正确”之类的错误。

那么有没有一种方法可以向一个人(更具体地说,是提交登录表单的人)提供回调?

如有任何帮助,我们将不胜感激。

谢谢。

最佳答案

socket.io 有确认回调,这里是文档

http://socket.io/docs/#sending-and-getting-data-(acknowledgements)

发出时添加回调函数作为第三个参数

$('form#login').submit(function() {
    var data = {};

    data.email = $("#login_email").val();
    data.password = $("#login_password").val();

    socket.emit('user login', data, function (result) {
        console.log(result);
    });
});

然后回调函数服务器端可以有一个附加参数,即您在发出时定义的回调

socket.on('user login', function (user, callback) {
    logger.info('Receiving login info for "' + user.email + '"...');

    UserApp.User.login({"login": user.email, "password": user.password}, function (error, result) {
        if (error) {
            logger.error('Login failed: ' + error.message);
        } else {
            var userToken = result.token;
            var userID = result.user_id;
            console.log("User has logged in.");

            UserApp.User.get({
                "user_id": userID
            }, function (error, result) {
                if (error) {
                    logger.error(error.message);
                } else {
                    logger.info(result[0]['first_name'] + " " + result[0]['last_name'] + " Has logged in!")
                    return callback('your results');
                }
            });
        }
    });
});

关于javascript - Socket.IO - 回调仅发出的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40203952/

相关文章:

javascript - 保护 CORS : is there a security scheme with cookies?

node.js - 在全局范围内同时运行 NPM 和 Yarn 的任何冲突

使用 Passport 时,Node.js 服务器在几次请求后卡住了

javascript - 在 socket.emit 中使用 setInterval

javascript - 如何使用socket.io实现生存时间

Javascript 帮助改变 writeln 中的颜色

javascript - 将变量从复选框传递给 onclick 函数

javascript - 如何在构建/测试时更改 Ionic 应用程序中的配置变量

javascript - 回调函数中的变量范围

php - Socket.io 和 Phalcon PHP