
2.10 从控制台读取用户输入
Node.js平台的Readline模块提供了很多实用的方法可以实现足够强大的应用。在本节中,通过一个Node实例向读者演示如何应用Readline模块模拟一个简单的控制台,来实现从控制台读取用户输入的功能。
【代码2-10】(详见源代码目录ch02-node-console-cli-readline.js文件)

【代码分析】
• 第04~08行代码执行的是加载Readline模块并进行初始化定义的操作。
• 第09行代码通过readline.setPrompt()方法模拟输出控制台的命令行提示符,本例程提示符为“NodeJS>”。关于readline.setPrompt()方法的语法说明如下:
readline.setPrompt(prompt, length)
其中,prompt参数用来定义命令行提示符;length参数用来定义命令行提示符的长度,length参数为可选参数。
• 第10行代码通过readline.prompt()方法模拟实现控制台,等待接收用户的输入。readline.prompt()方法的语法说明如下:
readline.prompt([preserveCursor])
其中,当preserveCursor参数设置为true时,用来阻止命令行提示符光标位被重置为0,通常preserveCursor参数可以不用设定。
• 第11行代码通过Readline模块提供的line事件来激发命令行输入功能,激活事件的方法为Node.js平台Event模块提供的on()方法。
• 第12~24行代码通过switch选择语法来实现接收用户输入后模拟控制台所做出的应答,具体效果如图2.11所示。

图2.11 模拟控台tinyCLI应用效果
从图2.11中可以看到,在命令行提示符“NodeJS>”出现后,用户依次输入name、code、time,控制台依次向用户反馈“King!”“Node.js!”“2019!”。而当用户无输入,直接按回车键时,控制台则会向用户反馈默认定义的字符串“Say what? I might have heard”,表示用户没有任何输入。
• 第26行代码通过readline.prompt()方法用来实现在接收完一次用输入后,再次返回模拟控制台命令行,等待用户下一次输入;如果没有该行,模拟控制台在接收完一次用户输入后就会失去命令行界面,读者可以自行验证一下。
• 第27~29行代码用来实现退出模拟控制台时的操作,此处通过readline模块提供的close事件来激发退出模拟控制台的操作,并且使用process模块的exit()方法完成退出的功能;另外,本例程在模拟控制台退出前向控制台界面输出一段字符串“Have a great day!”,用于提示退出操作已完成。