我正在开发一个节点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服务器上的第三个链接。
答案 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/
。您连接的路线错误。