无法从套接字连接外部定义的方法发出

时间:2012-01-09 20:54:20

标签: javascript node.js socket.io

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

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

错误

Node给出了以下错误。

  

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

     

ReferenceError:未定义套接字

1 个答案:

答案 0 :(得分:4)

您可以将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 });
  }
}

这样,socket可以访问Report

但是,您使用report作为连接处理程序的本地的变量。您确定不会在连接中覆盖report吗?您似乎更希望每个连接都有一个报告。在这种情况下,请将var添加到report作业。