Socket.io(Emit,on)无法正常工作-Node JS

时间:2018-08-08 19:56:50

标签: node.js socket.io

我正在开发一个节点JS应用程序,在此我尝试根据this教程使用socket.io。在本教程之前,一切都很好,即使客户端通过套接字连接到服务器,因为它会在连接时显示一条消息。但是我不知道为什么我的代码不能在发射,事件和事件处理程序上运行。

下面是我在服务器端的代码:

const express              =    require("express");
const app                  =    express();
const scrap                =    require("./algorithm");
const mysql                =    require("mysql");
const ms_connect           =    mysql.createConnection({
                                    host:'localhost',
                                    user:'root',
                                    password:'',
                                    database:'scrapper_db'
                                });
const server = app.listen(8000, function(){ console.log('Listening on 8000'); });
const io                   =    require("socket.io").listen(server);

app.use(express.static(__dirname + "/"));


io.on("connection",function(socket){
    console.log("Sockets Connection Made ! " + socket.id);
    socket.emit("testing",{data:"I am tested"});
    io.on("disconnect",function(){
        console.log("Client Disconnected !");
    })
})

//mySQL Conection
ms_connect.connect(function(err){
    if(err) console.log(err);
    
    ms_connect.query("Select * FROM test",function(err,rows,fields){
        if(err) console.log("Error Executing Query");
    })

})

app.get("/scrap",function(req,res){
    res.sendFile(__dirname+"/index.html");
})

客户端代码:

var socket = io.connect('http://localhost:8000/scrap');
console.log(socket.connected); //returns false :(
socket.on("testing", function(d) {
  console.log(d);
});

  

在客户端,socket.connected对象返回false,但是在服务器端,它表示已连接。我不知道如何   我正在使用this socket.io cdnjs服务器上的第三个链接。

2 个答案:

答案 0 :(得分:1)

您正在做io.connect('http://localhost:8000/scrap'),但是在服务器端的任何地方都没有提到该废料。它应该是io.connect('http://localhost:8000/')。不需要指向您的HTML文件,因为socket.io服务器和您的网络服务器不相关。

也应使用@TommyBs指出

socket.on('connect', () => { console.log(socket.connected);  });

检查是否已连接,因为连接是异步的,因此在您进行console.log(socket.connected);时它尚未连接

整个客户端代码应为

var socket = io.connect('http://localhost:8000');
socket.on('connect', () => { console.log(socket.connected);  });
socket.on("testing", function(d) {
  console.log(d);
});

答案 1 :(得分:0)

在客户端代码中将http://localhost:8000/scrap更改为http://localhost:8000/。您连接的路线错误。