Loading [MathJax]/jax/output/CommonHTML/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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
嵌入式开发如何实现μA级超低功耗?
μA级功耗指系统在正常运行或空闲状态下仅消耗微安级别的电流。通常,静态功耗(睡眠或空闲模式)和动态功耗(活动模式)都被严格控制。
不脱发的程序猿
2025/05/08
1260
嵌入式开发如何实现μA级超低功耗?
嵌入式系统中的低功耗定时器应用与优化实战
嵌入式系统的开发在现代科技中发挥着至关重要的作用。它们被广泛应用于从智能家居到工业自动化的各种领域。在本文中,我们将聚焦于使用ARM Cortex-M系列微控制器实现低功耗定时器的应用。我们将详细介绍在嵌入式系统中如何实现低功耗的定时器功能,并附上代码示例。
一键难忘
2023/12/11
4080
嵌入式系统降低功耗的设计技术
电源通常被认为是整个嵌入式系统的“心脏”,绝大多数电子设备50%~80%的节能潜力在于电源系统。研制开发新型开关电源是节能的主要举措之一。 近年来许多公司相继推出一系列功能齐全、种类繁多的低功耗器件,具有种类更多、功耗更低、体积更小、使用方便等特点。
不脱发的程序猿
2021/01/20
7260
NB-IoT嵌入式产品开发有哪些坑?
在 NB-IoT 嵌入式产品的设计阶段,存在一些常见的陷阱,若不加以注意,将直接影响产品的性能和可靠性。
不脱发的程序猿
2025/05/12
1170
NB-IoT嵌入式产品开发有哪些坑?
深入探索嵌入式系统开发:从LED控制到物联网集成
在嵌入式系统中控制LED是一个很常见的任务,可以用于指示状态、显示信息等。我们将使用C语言编写一个简单的LED控制程序,该程序将控制一个虚拟的LED,但可以根据需要将其扩展到实际的硬件上。
一键难忘
2023/12/11
4170
工业自动化中的嵌入式控制系统设计与优化
随着工业自动化的迅速发展,嵌入式控制系统在生产过程中扮演着至关重要的角色。本文将深入探讨工业自动化中嵌入式控制系统的设计与优化,介绍关键概念、技术挑战,并提供实际代码示例。
一键难忘
2023/12/12
5780
STM32通用低功耗组件——PM
嵌入式系统低功耗管理的目的在于满足用户对性能需求的前提下,尽可能降低系统能耗以延长设备待机时间。高性能与有限的电池能量在嵌入式系统中矛盾最为突出,硬件低功耗设计与软件低功耗管理的联合应用成为解决矛盾的有效手段。现在的各种 MCU 都或多或少的在低功耗方面提供了管理接口。比如对主控时钟频率的调整、工作电压的改变、总线频率的调整甚至关闭、外围设备工作时钟的关闭等。有了硬件上的支持,合理的软件设计就成为节能的关键,一般可以把低功耗管理分为三个类别:
AIoT-KK
2020/07/13
1.4K0
STM32通用低功耗组件——PM
低功耗设计方法-电源门控概述(一)
漏电功耗随着每一代CMOS工艺技术的发展而增长。这种泄漏功耗不仅是对电池供电或便携式产品的严重挑战,而且日益成为服务器、路由器和机顶盒等有线设备必须解决的问题。
数字IC小站
2022/08/26
9800
低功耗设计方法-电源门控概述(一)
基于STM32设计的大气气压检测装置
随着科技的发展与人们生活水平的提高,对于环境监测的需求日益增长。特别是在户外探险、气象研究以及航空航海等领域,实时准确地获取大气气压数据显得尤为重要。大气气压的变化不仅直接影响到天气预报的准确性,而且对于了解气候变化趋势、保障飞行安全等方面也具有不可忽视的作用。因此,设计一款便携式、高精度的大气气压检测装置变得十分必要。这样的装置能够让用户无论身处何地都能快速掌握周围环境的大气状况,为科学研究和个人活动提供有力支持。
DS小龙哥
2025/05/27
1080
基于STM32设计的大气气压检测装置
尚硅g 2024年嵌入式 线下班
嵌入式系统已经成为现代科技领域中不可或缺的一部分。从智能家居设备到汽车控制系统,从医疗器械到工业自动化,嵌入式系统无处不在,发挥着重要的作用。本文将从概念介绍到实践应用,带您深入了解嵌入式系统的世界。
用户11022338
2024/04/07
1980
小华半导体-低功耗 MCU:HC32L021 来喽~
在这个文章里面: 世界最小ARM-M0 MCU型号更正-HC32L110B6YA 我们就已经和小华有个照面了。
云深无际
2025/04/22
3660
小华半导体-低功耗 MCU:HC32L021 来喽~
嵌入式开发-微控制器 vs. 微处理器:如何选择适合你项目的解决方案
在嵌入式系统设计中,选择合适的处理器架构是至关重要的决策。微控制器(Microcontroller)和微处理器(Microprocessor)是两种常见的解决方案,它们各自具有优势和特点。本文将介绍微控制器和微处理器的区别,并提供一些代码实例,帮助你更好地选择适合你项目的解决方案。
一键难忘
2023/12/09
4360
看这里!低功耗STM32L4七大工作模式及应用策略帮你梳理好了!
STM32L系列具有比较显著的低功耗性能,在现代电子产品、工业仪器仪表、可穿戴设备应用等领域往往都需要设计低功耗应用,那么如何基于STM32L设计出一个好的低功耗应用,首先应比较准确的理解其核心的7大工作模式。
AI 电堂
2021/01/08
8.2K0
汽车零部件中嵌入式软件安全性设计方法
在汽车领域,嵌入式软件的安全性需求不仅仅是理论上的技术要求,而是直接与实际业务场景和用户体验紧密相连的。
不脱发的程序猿
2025/03/24
1270
汽车零部件中嵌入式软件安全性设计方法
C++嵌入式开发:开发嵌入式系统的驱动程序和应用
随着科技的不断进步,嵌入式系统在我们日常生活中发挥着越来越重要的作用。作为一种专门设计用于特定任务的计算机系统,嵌入式系统通常需要开发驱动程序和应用来实现特定的功能。本篇文章将介绍如何使用C++语言进行嵌入式开发,重点在于开发驱动程序和应用程序。
大盘鸡拌面
2023/12/02
8550
嵌入式编程之战:裸机VS实时系统
嵌入式系统开发可以分为 裸机(Bare Metal) 和 RTOS(实时操作系统) 两种方式。
云深无际
2025/02/20
2500
嵌入式编程之战:裸机VS实时系统
STM32与CSNP32GCR01-BOW在按摩仪器中的协同应用解决方案
1. 主控核心:STM32(如STM32F103系列)作为按摩仪器的“大脑”,负责协调光电感应检测、蓝牙通信、电机驱动(揉捏、敲打、振动模式)、热敷控制及用户交互(如OLED显示屏)等功能。
用户11033168
2025/05/20
1110
STM32与CSNP32GCR01-BOW在按摩仪器中的协同应用解决方案
MQTT?不!MQTT-SN才是工业物联网的明智选择!
这一问题的主要因素之一,也是设备成本的主要贡献者之一,就是传输的数据量,那么,通过选择一种高效的方式在物联网设备和应用程序之间进行通信,至少可以在一定程度上减轻这一成本。
Hello工控
2025/06/08
1930
MQTT?不!MQTT-SN才是工业物联网的明智选择!
STM32低功耗模式笔记
1、所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入;如果高阻状态是低电平,设成下拉输入;如果高阻是中间状态,设成模拟输入。这个很多人都提到过,必须的。作为输出口就免了,待机你想输出个什么东西,一定要输,硬件上加上下拉就可以了
小锋学长生活大爆炸
2020/08/13
2.3K0
STM32低功耗模式笔记
为什么现代单片机的串口数量越来越多?
尽管串口速率低,缺点显著,但其低成本、稳定性和广泛应用在现代嵌入式系统设计中仍具备优势。
不脱发的程序猿
2024/11/27
1500
为什么现代单片机的串口数量越来越多?
推荐阅读
相关推荐
嵌入式开发如何实现μA级超低功耗?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验