Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何从Node.js中的命令行读取输入

如何从Node.js中的命令行读取输入

作者头像
ccf19881030
发布于 2020-10-26 09:36:45
发布于 2020-10-26 09:36:45
9.3K00
代码可运行
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客
运行总次数:0
代码可运行

本文翻译自How to read input from the command line in Node.js

readline内置模块

您是否正在使用Node.js中开发一个小的CLI工具,并希望能够提示用户从命令行输入输入? Node.js正是为此目的提供了readline模块。 它提供了一个接口,用于从可读流(例如process.stdin)中一次读取一行数据。

这是一个简单的示例,提示用户输入其姓名和国籍,然后在控制台上打印这些详细信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// ask user for the anme input
rl.question(`What's your name? `, (name) => {

    // ask for nationality
    rl.question(`What are you from? `, (country) => {

        // log user details
        console.log(`${name} is from ${country}`);

        // close the stream
        rl.close();
    });

});

在上面的示例中,readline.createInterface()方法用于通过定义可读和可写流来创建readline的实例。

rl.question()方法显示查询(问题),并等待用户输入答案。 输入数据可用后,它将调用回调方法,并将用户输入作为第一个参数。

最后,我们在最终的回调中调用rl.close()方法以关闭readline接口。 您还可以侦听在关闭流时调用的close事件。 进行一些后期提问可能会很有用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// listen for close event
rl.on('close', () => {
    console.log("Goodbye ?");

    // exit the process
    process.exit(0);
    
});

查看readline文档以了解有关所有可用方法和事件的更多信息。

第三方模块-prompt

readline模块是一个低级Node.js软件包,对于复杂的用例,您可能会认为它太复杂了。 如果要使用更高级别的界面来处理用户输入,只需使用Node Package Manager(NPM)中的prompt模块。 您可以通过执行以下命令将其添加到您的项目中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install prompt --save

如果使用yarn作为包管理工具,可以执行如下命令添加prompt模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ yarn add prompt --dev

readline模块相比,使用prompt` 相对容易。 您无需显式配置可读和可写流。

让我们使用提示模块重写以上示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const prompt = require('prompt');

// start the prompt
prompt.start();

// ask user for the input
prompt.get(['name', 'country'], (err, result) => {
    if (err) {
        throw err;
    }

    // print user details
    console.log(`${result.name} is from ${result.country}`);

});

处理密码

提示模块可以更轻松地安全地要求用户输入密码。 它将屏蔽输入,而不显示密码的实际字符:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const prompt = require('prompt');

// start the prompt
prompt.start();

// define properties schema
var schema = {
    properties: {
        name: {
            pattern: /^[a-zA-Z\s\-]+$/,
            message: 'Name must be only letters, spaces, or dashes',
            required: true
        },
        password: {
            hidden: true
        }
    }
};


// ask user for the input
prompt.get(schema, (err, result) => {
    if (err) {
        throw err;
    }

    // print user credentials
    console.log(`${result.name} / ${result.password}`);

});

注意上例中的pattern属性。 它确保在移至下一个属性输入之前,正确验证了我们从用户那里收到的name`属性输入。

向对象添加属性

提示模块提供了另一个名为addProperties()的便捷方法,可通过从命令行添加属性数据来扩展现有对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const prompt = require('prompt');

// start the prompt
prompt.start();

// create an object
const user = {
    name: 'John Doe',
    country: 'USA'
};

// extend `user` object
prompt.addProperties(user, ['email', 'age'], (err) => {
    if (err) {
        throw err;
    }

    // print modified object
    console.dir(user);

});

现在,如果您运行上述程序,您应该会看到类似于以下内容的输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ node index.js
prompt: email:  john.doe@example.com
prompt: age:  23
{ name: 'John Doe',
  country: 'USA',
  email: 'john.doe@example.com',
  age: '23' }

如上所示,prompt是高度可定制的。 请查阅官方文档以获取更多信息。 如果您打算在Node.js中构建可靠的CLI工具,则prompt可能是一个很好的选择。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
技术实践:快速批量下载网站图片资源实现方法
你好,我是喵喵侠。最近在找一套素材,看到了一个网站上的素材很实用,于是想要下载下来。一个个的下载属实太麻烦,毕竟图片有好几十张呢。一个个点速度慢,而且很容易遗漏。所以我写了一个Shell脚本来帮我解决这个问题。
喵喵侠
2025/07/02
1270
技术实践:快速批量下载网站图片资源实现方法
【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)
我们每天都使用CLI程序(例如Terminal,cmd,Powershell等)进行软件开发。你使用的每个工具本质上都是其他软件工程师的产品,我们也可以制作自己的CLI工具。
张张
2020/05/07
1.6K0
【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)
几道算法题记录
(1)给定一个十进制,求Protocol Buffers的 Varint编码;给定一个16进制的 ZigZag编码,求原码;
meteoric
2021/11/19
2400
网易递归编程题,魔法币
输入描述: 输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。
RobinsonZhang
2018/08/28
2600
MCP SDK 快速接入 DeepSeek 并添加工具!万万没想到MCP这么简单好用!
重新整理了上篇文章,主要修正了错误的地方,加上了正确的截图和代码!感谢大家的积极指正!
萌萌哒草头将军
2025/04/19
1.6K0
MCP SDK 快速接入 DeepSeek 并添加工具!万万没想到MCP这么简单好用!
Node 17:支持 Readline Promise API
readline 模块提供了一个接口,用于一次一行地从可读流(例如 process.stdin)中读取数据。
ConardLi
2021/11/05
1.2K0
十六进制记忆训练shell交互小程序游戏
最近正在准备软考,发现自己对10进制转二进制 计算记忆能力不怎么深了。当然,在本子上算出来,然后背一背也记得住的,但是那就有点乏味了。所以花半个小时,写了shell交互小程序.
Jacky-易小天
2024/03/13
1450
十六进制记忆训练shell交互小程序游戏
MCP TypeScript SDK 初体验:挑战快速搭建一个 AI 应用!
这篇文章记录一下我用 MCP TypeScript SDK 实现一个自包含的 AI 聊天应用的过程:内部包含 MCP 服务器提供上下文,客户端拿上下文再去调 LLM 接口拿回答!
萌萌哒草头将军
2025/04/11
7440
MCP TypeScript SDK 初体验:挑战快速搭建一个 AI 应用!
一键JS混淆加密:功能集成到鼠标右键菜单
目标:将“JS混淆加密”功能集成到鼠标右键菜单,一键点击完成JavaScript代码混淆加密。
用户8703799
2024/04/02
3490
一键JS混淆加密:功能集成到鼠标右键菜单
Node.js 控制台动画,绘制跨年祝福
今天是 2021 年的最后一天了,明天就是 2022 年。回顾过去一年,要特别感谢大家对我的支持。
神说要有光zxg
2022/01/07
2.3K0
Node.js 控制台动画,绘制跨年祝福
Nodejs进阶:readline实现日志分析+简易命令行工具
模块概览 readline是个非常实用的模块。如名字所示,主要用来实现逐行读取,比如读取用户输入,或者读取文件内容。常见使用场景有下面几种,本文会逐一举例说明。本文相关代码可在笔者github上找到。
IMWeb前端团队
2017/12/28
1.4K0
【前端】使用readline模块实现Node.js的输入输出
zhaokang555
2023/10/17
3660
记一次华为机试
华为机试分为 3 题,两题 100 分,一题 200 分,压线 150 分算你过,时间150分钟,支持多语言环境(牛客网),考试时需全程打开摄像头,电脑屏幕分享,手机打开某小程序(可用计算器)不退出,可用本地 IDE, 会有一些测试题给你熟悉环境预热的。
江涛学编程
2021/03/16
9.6K1
Node.js v17 来了,看看都有哪些新功能?
Node.js v17 版本已发布,取代了 v16 做为当前版本,新的 v17 版本提供了一些新功能:基于 Promise 的其它核心模块 API、错误堆栈尾部增加 Node.js 版本信息、OpenSSL 3.0 支持、v8 JavaScript 引擎更新至 9.5。
五月君
2021/10/27
1.8K0
Node.js v17 来了,看看都有哪些新功能?
Week5-脚手架创建项目流程设计和开发
注:由于我本地之前已经配好了,所以我本地的启动方式为:mongod --config /usr/local/etc/mongod.conf 查看mongodb.conf文件,我本地的dbpath路径为:/usr/local/var/mongodb 安装第三方工具:Robot 3T 连接到本地后:
六个周
2022/10/28
8000
Week5-脚手架创建项目流程设计和开发
一统江湖的大前端(6)commander.js + inquirer.js——懒,才是第一生产力
你没有看错,懒绝壁是第一生产力,技术的进步,很多时候都是因为一些非常聪明的人难以忍受一些(在他们眼里)枯燥重复且低效的东西,从而发明出的东西,无论这些新发明在经历了迭代和打磨之后看起来多么牛逼耀眼,但其本质基本都可以归纳为:
大史不说话
2018/10/09
1.7K1
一统江湖的大前端(6)commander.js + inquirer.js——懒,才是第一生产力
如何用 Node.js 实现一个微型 CLI
命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。
林小帅
2020/04/06
1.1K0
如何用 Node.js 实现一个微型 CLI
nodejs控制台传输、接收文件
我一边查官网文档一边写的,虽然有send方法,但不知道receive方法在哪,最终还是用emit。
gojam
2019/11/30
1.1K0
从服务端生成Excel电子表格(Node.js+SpreadJS)
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,通常用于创建网络应用程序。它可以同时处理多个连接,并且不像其他大多数模型那样依赖线程。
葡萄城控件
2022/05/09
3.4K0
从服务端生成Excel电子表格(Node.js+SpreadJS)
教程 | 如何使用JavaScript构建机器学习模型
选自:hackernoon 作者:Abhishek Soni 参与:李泽南 目前,机器学习领域建模的主要语言是 Python 和 R,前不久腾讯推出的机器学习框架 Angel 则支持 Java 和 S
机器之心
2018/05/08
1.2K0
教程 | 如何使用JavaScript构建机器学习模型
推荐阅读
相关推荐
技术实践:快速批量下载网站图片资源实现方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验