Пользовательский ввод не читается правильно в приложении NodeJS CLI - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь собрать пользовательский ввод из командной строки, чтобы создать простое приложение интерфейса командной строки. Я использую функцию standard_input.on(), чтобы иметь возможность захватить ввод пользователя и использовать его, чтобы определить, какой ответ пользователь должен увидеть в своей командной строке. Захваченные данные не читаются должным образом в функции обратного вызова. Ниже приведен код.

const fs = require("fs"),
path = require("path");

const dir = path.resolve(__dirname);

var standard_input = process.stdin;

standard_input.setEncoding('utf-8');

console.log("Please type yes or no.");

standard_input.on('data', function (data) {
   if(data === 'yes'){
      console.log("OK I will.");
      process.exit();
   } else if (data === 'no') {
      console.log("OK I won't.");
      process.exit();
   } else {
      console.log("Please enter yes or no.");
   }
});

Первое приглашение "Please type yes or no." выполняется правильно, и я могу ввести в командной строке, но когда я набираю yes или no, оно отвечает приглашением else: Please enter yes or no.

Я пробовал yes, YES, 'yes' и 'YES', а также четыре одинаковых формата для no. Я также попытался изменить строку if(data === 'yes') на все четыре формата, а также if(data === 'yes\n') на случай, если ввод сбрасывал условие.

Также, когда я console.log(data) записывает правильные данные. Поэтому, если я наберу yes, функция обратного вызова запишет yes. Похоже, что он работает правильно, кроме фактической if/else оценки, он работает только с последним оператором else.

В настоящее время я работаю на v8.11.1 Node.

1 Ответ

0 голосов
/ 03 июля 2019

Как отметил @jonrsharpe в комментариях, использование data.trim() на data перед сравнением его с 'yes' и 'no' решило проблему.

Ниже приведен исправленный оператор if/else.

if(data.trim() === 'yes'){
  console.log("OK I will.");
  process.exit();
} else if (data.trim() === 'no') {
  console.log("OK I won't.");
  process.exit();
} else {
  console.log("Please enter yes or no.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...