Nodejs新人求教如何在终端获得输入?
Nodejs新人求教如何在终端获得输入?
网上搜了好多,基本都不管用。最后就卡在运行而且能输入(但没有指定的输入提示),输入之后就报错 Uncaught ReferenceError ReferenceError: asd is not defined at <anonymous> (repl:1:1)
asd is not defined
你换个 ls
什么的试试?
可以看下文档:
https://nodejs.org/dist/latest-v18.x/docs/api/process.html#processargv
本质上是类似于获取 shell 的输入,也就是一个标准流的输入
不知道你是想获取哪种,我理解有两种,一种是在终端执行一个命令后,获取到这个命令的输入;第二种是在终端进行交互式的输入,可以实时获取到输入。
直接给两种实现的代码吧typescript<br>// 1 、获取执行命令时的参数<br>const commandSegments = process.argv;<br>console.log(commandSegments);<br><br>/**<br> * <br> * node index.js run --help<br> * commandSegments === ['/usr/local/bin/node', '/Users/litao/Documents/temp/cmd/index.js', 'run', '--help'];<br> */<br><br>// 2 、交互式获取输入的参数<br>const { createInterface } = require("readline");<br>const { stdin, stdout } = process;<br>console.log("Please input something:");<br>const rl = createInterface({<br> input: stdin,<br> output: stdout,<br>});<br>rl.on("line", async (input) => {<br> console.log("your input is:", input);<br>});<br><br>/**<br> * <br> * node index.js<br> * > hello world<br> * > your input is: hello world<br> */<br><br>
首先是运行这个脚本,我用 node index.js run --help
,首先会打印bash<br>[<br> '/usr/local/bin/node',<br> '/Users/litao/Documents/temp/cmd/index.js',<br> 'run',<br> '--help'<br>]<br>
这个就是 process.argv
了,就是上面说的第一种;然后命令不会退出,这时可以继续输入,比如 aaa
,终端会响应bash<br>your input is: aaa<br>
在 Node.js 中,可以使用 readline 模块来实现交互式的输入。该模块提供了一个接口,可以从命令行读取用户输入的一行文本。例如,以下代码演示了如何使用 readline 模块来获取用户在终端中输入的文本:
Copy code
const readline = require(‘readline’);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('请输入文本: ', (answer) => {
// 在这里处理用户输入的文本
console.log(您输入的文本是: ${answer}
);
rl.close();
});
上面的代码创建了一个 readline 接口,然后使用 question 方法向用户询问一个问题,并在用户输入文本后处理该文本。
需要注意的是,readline 模块只能在 Node.js 环境下使用,如果要在浏览器中实现交互式输入,则需要使用其他方式。
推荐 inquirer (交互)或者 commander (单命令)
一个 inquirer demo (我写的机器人框架
module.exports = async () => {
const config = await inquirer.prompt([
{
type: “number”,
name: “account”,
message: “Bot account >”,
},
},
{
type: “input”,
name: “admin”,
message: “Bot admin >”,
},
{
type: “list”,
name: “login”,
message: “login mode >”,
choices: [
{ name: “password”, value: ‘pwd’ },
{ name: “qrcode(same network)”, value: ‘qrcode’ },
],
},
},
]);
在Node.js中,从终端获取输入通常使用内置的readline
模块。这个模块提供了一个接口来读取来自标准输入(stdin)的数据。下面是一个简单的示例,展示如何在Node.js脚本中从终端获取用户输入:
const readline = require('readline');
// 创建接口实例
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 提示用户输入
rl.question('请输入一些内容: ', (answer) => {
// 输出用户输入的内容
console.log(`你输入的是: ${answer}`);
// 关闭接口实例
rl.close();
});
// 监听 'close' 事件,以便在接口关闭时执行一些清理操作(可选)
rl.on('close', () => {
console.log('readline 接口已关闭。');
process.exit(0);
});
要运行这个脚本,请将其保存为一个.js
文件(例如input.js
),然后在终端中执行以下命令:
node input.js
运行后,脚本会等待用户输入,并在用户按下回车键后输出输入的内容。
这个示例展示了readline
模块的基本用法,它非常适合处理简单的命令行交互。对于更复杂的输入需求,你可以进一步探索readline
模块的其他功能,如逐字符读取、处理输入超时等。