我长期以来一直在这个问题上工作,并且在许多网站上冲浪但没有找到令人信服的答案。
让我解释一下我的要求。我想接受来自终端的输入,使用这些输入来运行一组指令,然后再次使用 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条件。它继续接受任何事情。
答案 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应用程序。
请参阅: