使用process.stdin接受来自nodejs中的终端的动态输入的问题

时间:2016-08-03 14:16:53

标签: javascript node.js

我长期以来一直在这个问题上工作,并且在许多网站上冲浪但没有找到令人信服的答案。 让我解释一下我的要求。我想接受来自终端的输入,使用这些输入来运行一组指令,然后再次使用 nodejs 中的process.stdin接受来自终端的新输入。

请在下面找到我的示例代码。请注意我的错误和更好的说明方式,这将有助于我更好地学习。

input();
console.log("Completed 1");
input();
function input()
{
  process.stdin.setEncoding('utf8');
  process.stdin.resume();
  process.stdin.on('data',function(text){
    console.log("Type: " + typeof text); 
    if(text == "quit"){
      console.log("Inside if"); 
      done();
    }
    console.log("Received: " + text);
  });
}

function done(){
  console.log("Exiting");
  process.exit();
}

当我运行此代码时,如果我的输入是"退出",则此文本未匹配且未输入if条件。它继续接受任何事情。

2 个答案:

答案 0 :(得分:0)

您输入的字符串末尾有一个换行符:

quit\n

在条件中提供,将解决此问题。请参阅此documentation作为示例。

input();
console.log("Completed 1");
input();
function input()
{
    process.stdin.setEncoding('utf8');
    process.stdin.resume();
    process.stdin.on('data',function(text){
        console.log("Type: " + typeof text);
        if(text === "quit\n"){
            console.log("Inside if");
            done();
        }
        console.log("Received: " + text);
    });
}

function done(){
    console.log("Exiting");
    process.exit();
}

编辑:要解决您的第二个问题,请参阅流程文档。解决方案很明确。拨打电话回“退出”活动。该回调中只允许同步代码。

function input() {
    process.stdin.setEncoding('utf8');
    process.stdin.resume();
    process.stdin.on('data',function(text){
        console.log("Type: " + typeof text);
        if(text === "quit\n"){
            console.log("Inside if");
            done();
        }
        console.log("Received: " + text);
    });
    process.on('exit', (code) => {
        console.log('got to it');
    }); }

答案 1 :(得分:0)

输入"退出"你点击了Enter,所以你实际上也需要匹配一个换行符#34; \ n"

请改为尝试:

if(text == "quit\n") {
  console.log("Inside if"); 
  done();
}

顺便说一句,有一些很棒的软件包可以帮助创建Node CLI应用程序。

请参阅: