socket.io -- 如何使用服务器验证用户输入

问题描述 投票:0回答:1

我试图提示用户在客户端输入,然后检查输入在服务器上是否有效。如果输入无效,客户端应重新提示,直到收到有效输入。 只有输入有效后才可以进行其他操作。

客户端.js

while(looping){
    temp_name = prompt(usr + err_msg + pmsg, "");
    socket.emit("is_valid", temp_name, (response) => {
        looping = !response.status
        err_msg = response.message
    });
}

服务器.js

// check if username is valid
    socket.on("is_valid", (temp_name, callback) => {
        // init
        let msg = "";
        let stat = false;

        // (check if valid)

        // return
        stat = (msg == "")
        response = {
            status: stat,
            message: msg,
        }
        callback(response);
    });

如果我删除 client.js 中的 while 循环,我的代码就可以工作。 但如果我添加 while 循环,则没有任何效果。也没有打印日志语句。

之所以存在 while 循环,是因为我想在输入无效时再次提示用户。

为什么会出现这种情况?

谢谢你。

我希望它返回 temp_name 是否有效。

如果有效,则looping = false,并且应该退出while循环。 如果无效,则looping = true,并且会再次提示用户。目前,无论输入什么内容,它都会重复提示用户。但如果我删除 while 循环,它就会正常工作并返回我期望的值。

node.js socket.io
1个回答
0
投票

修好了。解决方案是使用promise(在客户端,使用socket.emitWithAck而不是socket.emit)

https://socket.io/docs/v4/tutorial/api-overview#with-a-promise

否则一切都是异步的,当您检查它时,响应将为空。

谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.