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

Tra*_*vis 1 javascript node.js socket.io

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

应用程序.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 });
  }
}
Run Code Online (Sandbox Code Playgroud)

错误

节点给我以下错误。

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

ReferenceError:套接字未定义

pim*_*vdb 5

你可以这样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 });
  }
}
Run Code Online (Sandbox Code Playgroud)

这样,socket就可以在Report.

但是,您用作连接处理程序的report本地变量。您确定没有跨连接覆盖吗?看来您更希望每个连接都有一个报告。在这种情况下,请添加到作业之前。reportvarreport