Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未调用Socket.io_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 未调用Socket.io

Javascript 未调用Socket.io,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我这里有这个密码 io.on("connection", function(socket){ //other methods where emit works socket.on("login", function(data) { try { pg.connect(conString, function(err, con) { var query = con.query("SELECT * FROM ac

我这里有这个密码

io.on("connection", function(socket){

    //other methods where emit works

    socket.on("login", function(data) {
        try {
            pg.connect(conString, function(err, con) {
                var query = con.query("SELECT * FROM accounts WHERE username" +
                "='" + data.usn + "';");
                query.on("row", function(row, result) result.addRow(row); });
                query.on("end", function(result) {
                    if (sha512(data.pwd, result.rows[0].salt).hash ===
                        result.rows[0].password) {

                        socket.emit("loginResponse", { status: "Success" });

                        console.log("I GOT UP TO HERE WITHOUT EMITTING! WTF?");
                        console.log(sha512(data.pwd,result.rows[0].salt).hash);
                        console.log(result.rows[0].password);
                    }
                });
            });
        } catch (ex) { console.log(ex); }
    });
});
显然,在客户端,我有这样的东西:

socket.on("loginResponse", function(data) {
    alert(data.status);
});

但是,每当我尝试成功登录时,我的服务器不会向客户端发送任何信息,即,我将在终端上看到打印的行,但客户端不会从服务器获得响应。我对此感到困惑。我有另一个函数,它涉及PostgreSQL驱动程序并成功地发出,但这个函数没有。有人知道为什么会这样吗?

您的代码中有一个bug。异步函数不应写入try/catch中

try {
    setTimeout(function() {
        do_something_that_throws();
    }, 1000);
}
catch (e) {
    alert("You won't see this!");
}
问题是控制流在执行dou-something(dou-something)之前离开try块,因此回调中抛出的错误永远不会被捕获

socket.on("login", function(data) {    
  pg.connect(conString, function(err, con) {
    if(err) {
      // handle error
    }
    var query = con.query("SELECT * FROM accounts WHERE username" +
    "='" + data.usn + "';");
    query.on("row", function(row, result) result.addRow(row); });
    query.on("end", function(result) {
      if (sha512(data.pwd, result.rows[0].salt).hash ===
        result.rows[0].password) {

        socket.emit("loginResponse", { status: "Success" });

        console.log("I GOT UP TO HERE WITHOUT EMITTING! WTF?");
        console.log(sha512(data.pwd,result.rows[0].salt).hash);
        console.log(result.rows[0].password);
      }
    });
  });
});

试试这种方法,让我知道它是否有效。

我在那里没有看到任何发射。。。只有内部具有发射的on函数。。。另外,在客户端,您需要包括cde var societ=io.connect();是的,我已经在连接到服务器的客户端代码中声明了。我试图发出loginResponse,但没有调用它。何时发出登录?如果我添加socket.emit(“loginResponse”,{status:“Error”});在try块之后,客户机就得到了响应。但出于某种奇怪的原因,我已经竭尽全力地寻找解决方案,根本没有调用内部emit。此外,一旦客户提交表单,就会从客户机发送登录请求。我验证了此路由是否正确,因为我可以在终端中看到console.log调用。我尝试了您的解决方案,但仍然遇到相同的问题:socket.emit()被忽略。如果我将这个socket.emit()放在可以调用它的合理位置,那么它工作正常,因此我知道客户端没有问题。以下是我尝试过的:您应该使用另一个事件来调试它。例如-socket.emit('test',{status:“Success”});现在,从测试事件的socket.on发出loginResponse。因此,我尝试了几种变通方法,但都不起作用:使用不同的名称发出,调用发出消息的其他方法,发出不同的响应。似乎query.on(“end”)忽略了socket.emit()调用和调用socket.emit()的任何函数,尽管它打印出了这三行。有趣的是,当我尝试这样做时:调用了socket.emit(),但尽管成功登录,它仍然使用了错误的数据,即它应该发送“Success”,但它发送的是“foo”即使这三行是打印出来的,看看这个-