未定义的套接字属性

时间:2015-01-22 18:53:23

标签: node.js express socket.io

我目前正在尝试使用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上搜索过,发现没有与我的代码相关的解决方案。请帮助!

3 个答案:

答案 0 :(得分:0)

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

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);
    });
});

答案 1 :(得分:0)

您在声明之前使用了变量,并且您的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);

答案 2 :(得分:0)

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

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

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

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

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