【问题标题】:How to add conditions in process.stdin's readable event?如何在 process.stdin 的可读事件中添加条件?
【发布时间】:2016-12-10 14:40:38
【问题描述】:

好吧,我正在尝试将一个简单的 if statement 传递给 NodeJS 中的 process.stdin 可读流。但这似乎不起作用。这是代码:

process.stdin.on('readable', function() {
  var chunk = process.stdin.read();
  if (chunk !== null && chunk == 'foo') {
    process.stdout.write('true\n');
} else if (chunk !== null) {
    process.stdout.write('false\n');
}

有谁知道,我在这里做错了什么?我也试过chunk == 'foo\n',但是没有运气。它唯一有效的时候是我将chunk 值设置为一个数字,例如chunk == 10

【问题讨论】:

    标签: javascript node.js stdin


    【解决方案1】:

    @Siam 这里的问题是chunkBuffer 类型,而不是string。你可以用chunk.toString()把它变成一个字符串,然后和"foo\n"比较就可以了

    所以你的代码看起来像这样:

    process.stdin.on('readable', function() {
      var chunk = process.stdin.read();
      if (chunk !== null && chunk.toString() == 'foo\n') {
        process.stdout.write('true\n');
      } else if (chunk !== null) {
        process.stdout.write('false\n');
      }
    });
    

    编辑 1:

    确保您使用的比较字符串与输入相同。例如,在上述情况下,换行符在基于 Windows 的系统上可以是 CRLF\r\n,而在基于 Unix 的系统上是 LF\n。因此,如果在 Windows 上,请尝试使用 "foo\r\n" 进行比较

    【讨论】:

    • 是的,我已经尝试过了,但是没有用。我不知道怎么了。 :(
    • 它对我有用...可能是其他问题...您是否尝试使用“数据”事件?而不是“可读” 另外,您使用的是什么版本的 node.js?
    • 是的,我做到了。但“数据”也有同样的问题。 :/ 我使用的是 NodeJS 7.0.0 版。
    • 你能记录下 chunk.toString 的值吗(先编码,使用任何 escapeencodeURI),它会告诉你输入和 matchString 之间有什么区别
    • 在 windows 系统上,新行可以是 CRLF\r\n,而在基于 unix 的系统上,它是 LF\n .. 如果在 windows 上,请尝试使用 \r\n
    【解决方案2】:

    您可以使用 .prompt() (example) 方法

    【讨论】:

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