首页 > 解决方案 > 在回调中从终端读取

问题描述

process.stdout.write();每次从客户端接收到服务器的套接字时,我的程序在终端中。但是,我无法将回调传递给我的代码以从终端(process.stderr.on)读取数据流并将其作为新套接字(从服务器)发送回客户端。

现在,这是我的代码 - 在以下之后不起作用.write

io.on('connection', (socket) => {
    socket.on('SEND_COORDINATES', (data) => {
      const dataToString = `${data.x.toString()}, ${data.y.toString()}`;
      process.stdout.write(dataToString);
    }, (data) => {
      process.stderr.on('data', (data) => {
        socket.emit("SEND_AGAIN_COORDINATES", {data};
      });
    }
    )
});

我不确定我能做到这一点,所以可能有一些我不明白的逻辑。感谢你们对我的帮助。

标签: node.jssocket.io

解决方案


您将第三个参数传递给 .on 方法。看起来你正在使用 socket.io。如果是这种情况,请查看他们网站上的 .on 文档:

https://socket.io/docs/server-api/#socket-on-eventName-callback

通常是这种情况,但是 .on 是从 Node EventEmitter 继承的。我们现在去那里。

https://nodejs.org/api/events.html#events_emitter_on_eventname_listener

发射器.on(事件名称,侦听器)

  • 事件名称 <字符串> | <符号> 事件的名称。
  • listener <Function> 回调函数
  • 返回:< EventEmitter >

Emitter.on 只有 2 个参数,因此看不到您的第二个回调或第三个参数。

io.on('connection', (socket) => {
    socket.on('SEND_COORDINATES', (data) => {}, (data) => {
        process.stderr.on('data', (data) => {});
    })
});

删除了一些内脏,以便您可以更好地看到它。一切都需要进入 socket.on 事件的 FIRST 回调。


推荐阅读