未定义的套接字 属性

Socket Property Of Undefined

我目前正在尝试使用 node、express 和 socket.io 创建一个实时聊天室。当我 运行 代码时,我收到此错误消息: http://gyazo.com/d9956a80a691d1642b438173b0bd85bf

此外,这是我的 index.js 代码:

var express = require("express");
var app = express();
var port = 3700;

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

app.set("views", __dirname + "/tpl");
app.set("view engine", "jade");
app.engine("jade", require("jade").__express);
app.get("/", function (req, res){
    res.render("page");
});

io.sockets.on("connection", function (socket){
    socket.emit("message", { message: "welcome to the chat" });
    socket.on("send", function (data){
        io.sockets.emit("message", data);
    });
});

var io = require("socket.io").listen(app.listen(port));
console.log("Listening On Port " + port);

我搜索了 google,没有找到与我的代码相关的解决方案。请帮忙!

您在初始化之前使用 io 变量将 var io 移动到 io.sockets

之前
var io = require("socket.io").listen(app.listen(port));
io.sockets.on("connection", function (socket){
    socket.emit("message", { message: "welcome to the chat" });
    socket.on("send", function (data){
        io.sockets.emit("message", data);
    });
});

您在变量声明之前使用它,您的 listen() 调用看起来有点奇怪。

而不是这样做:

io.sockets.on("connection", function (socket){
  socket.emit("message", { message: "welcome to the chat" });
  socket.on("send", function (data){
    io.sockets.emit("message", data);
  });
});

var io = require("socket.io").listen(app.listen(port));

你应该做更多这样的事情:

var io = require("socket.io")(app);

io.sockets.on("connection", function (socket){
  socket.emit("message", { message: "welcome to the chat" });
  socket.on("send", function (data){
    io.sockets.emit("message", data);
  });
});

app.listen(port);

您在 io 变量初始化之前访问它。

只需移动以下行(io变量初始化):

var io = require("socket.io").listen(app.listen(port));

在此行首次使用 io 变量之前:

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