如何在process.stdin的可读事件中添加条件?

How to add conditions in process.stdin's readable event?

好吧,我正在尝试将一个简单的 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.

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

@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。因此,尝试使用 "foo\r\n" 进行比较,如果在 windows