2017-02-01 8 views
2

Ну, я пытаюсь передать простую инструкцию if в readable stream process.stdin в 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.

+0

Что означает «это не кажется рабочим»? Что такое вход? Какова фактическая стоимость 'chunk'? (Что вы получаете, когда выполняете 'console.log (chunk)')? –

+0

Когда вы набираете 'foo' на process.stdin, тогда кусок '', поэтому вы можете использовать 'if (chunk.toString() === 'foo \ n')', который дает true ' – mk12ok

ответ

0

Проблема в том, что кусок имеет тип буфера, а не строку. Вы можете использовать chunk.toString(), чтобы сделать это строка, а затем сравнить его с foo\n (если на Linux) или foo\r\n (если на окнах), и это будет работать

Так что ваш код будет выглядеть примерно так:

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

спасибо! Оно работало завораживающе :) –

 Смежные вопросы

  • Нет связанных вопросов^_^