【问题标题】:Unable to setRawMode in a nodejs script无法在 nodejs 脚本中设置原始模式
【发布时间】:2015-06-19 19:50:07
【问题描述】:

最初我尝试使用tty.setRawMode(true) 设置原始模式,日志告诉我已弃用,我应该使用process.stdin.setRawMode(true) 但该命令给了我TypeError: Object #<Socket> has no method 'setRawMode' 我似乎无法在原始模式中找到更多建议任何其他方法的模式文档,任何人都知道如何使其工作?

我使用的是 0.10.25 版

【问题讨论】:

  • 检查 process.stdin.isTTY 的结果。如果为 false,则节点未在 TTY 上下文中运行,并且 process.stdin 将不是 TTY.readStream
  • 要找出原因,我需要有关您如何运行程序的更多信息。您可能在使用child_process 吗?
  • 我该如何检查呢?我运行它没有结果,console.log 返回未定义。没有子进程。
  • 让我换个说法:当你执行节点时,你是在运行脚本还是使用repl?你在 Windows 还是 Linux 上?任何信息都会有所帮助(console.log 总是返回 undefined)。 Node 可能无法检测到它是从终端运行的,因此我需要有关您的环境的更多信息以提供帮助。
  • 我的意思是我跑了console.log(process.stdin.isTTY) 并没有定义。我正在运行 linux no repl,我通过终端运行它 node myscript.js stdout.write 工作正常,所以标准输入/输出似乎是控制台。

标签: javascript node.js stdin


【解决方案1】:

它通过 node server.js 工作得很好,但是 nodemon server.js 给了我TypeError: process.stdin.setRawMode is not a function 错误并且服务器中止。

由于 nodemon 也在等待按键被按下(即“rs”重新启动服务器),我们遇到了冲突,因为 nodemon 已征用 @987654322 @。

为了解决这个问题,我添加了一个名为 nodemonMode=yes|noconfig.ini 指令。如果它设置为yes,那么我会跳过其中包含process.stdin.setRawMode(true) 代码的违规代码部分。我敢打赌,还有一种更简单的方法可以确定您是否正在运行 nodemon

【讨论】:

    【解决方案2】:

    事实证明 nodemon 使用 child_process,因为在脚本中写入 process.stdin.setRawMode(true);,然后使用 nodemon 运行将导致 TypeError: Object #<Socket> has no method 'setRawMode'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多