可以't从套接字连接外部定义的方法发出

Can't emit from method defined outside of socket connection

本文关键字:定义 外部 方法 连接 套接字 可以      更新时间:2023-09-26

我正在尝试使用自定义对象的方法来向套接字连接发射。对象是在套接字连接外部定义的,但随后在套接字连接内部实例化。代码和错误如下。

app.js

...
io.sockets.on('connection', function (socket) {
  report = new Report();
  socket.on('dataChange', function(newData) {
    report.update(newData);
  });
});
function Report () {
  this.update = function (data) {
    socket.emit('updateReport', { data: data });
  }
}

错误

节点给了我以下错误。

socket.emit('updateReport',{data:data})
^

ReferenceError:套接字未定义

您可以将socket传递给Report,如下所示:

io.sockets.on('connection', function (socket) {
  report = new Report(socket);
  socket.on('dataChange', function(newData) {
    report.update(newData);
  });
});
function Report (socket) {
  this.update = function (data) {
    socket.emit('updateReport', { data: data });
  }
}

这样,socketReport中是可访问的。

但是,您使用report作为连接处理程序的而非本地变量。您确定没有在连接之间覆盖report吗?您似乎更希望每个连接都有一个报告。在这种情况下,在report赋值之前加上var