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

发布于 2024-12-25 16:27:06 字数 529 浏览 0 评论 0原文

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

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

参考错误:套接字未定义

I'm trying to use a custom object's method to emit to a socket connection. The object is defined outside of the socket connection, but then instantiated inside of it. Code and error follows.

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

Error

Node gives me the following error.

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

ReferenceError: socket is not defined

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

相思碎 2025-01-01 16:27:06

您可以将 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 作为连接处理程序本地的变量。您确定没有跨连接覆盖报告吗?看来您更希望每个连接都有一个报告。在这种情况下,请将 var 添加到 report 赋值之前。

You could pass socket to Report like this:

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

That way, socket is accessible in Report.

However, you used report as a variable that's not local to the connection handler. Are you sure you're not overwriting report across connections? It seems you rather want a report per connection. In that case, prepend var to the report assignment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文