Javascript 如何在流程中添加条件。stdin';什么是可读事件?
我正在尝试将一个简单的Javascript 如何在流程中添加条件。stdin';什么是可读事件?,javascript,node.js,stdin,Javascript,Node.js,Stdin,我正在尝试将一个简单的if语句传递给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) {
if语句
传递给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()()方法@Siam这里的问题是chunk
是缓冲区类型,而不是字符串。您可以使用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的值吗(首先使用任何转义或编码URI
)这将告诉您在windows系统上输入和匹配字符串之间的区别,新行可以是CRLF
或\r\n
,而在基于unix的系统上,它的LF
或\n
。如果在windows上,请尝试使用\r\n