nodejs参数的处理与用户的交互

解析脚本参数

作为脚本或者命令行工具,一般都需要支持不同的用户参数。默认参数被保存在process.argv的数组中,如下:
[ nodeBinary, script, arg0, arg1, … ]

模块commander

但是为了更方便地处理参数,我们可以使用第三方模块commander。安装如下:
npm install –save commander

然后我们可以使用commander如下:

#!/usr/bin/env node
- console.log('Hello, world!');
+ var program = require('commander');
+
+ program
+  .arguments('<file>')
+  .option('-u, --username <username>', 'The user to authenticate as')
+  .option('-p, --password <password>', 'The user's password')
+  .action(function(file) {
+    console.log('user: %s pass: %s file: %s',
+        program.username, program.password, file);
+  })
+  .parse(process.argv);
</password></username></file>

运行和结果如下:

snippet -u kannonboy -p correcthorsebatterystaple my_awesome_file
user: kannonboy pass: correcthorsebatterystaple file: my_awesome_file

默认的帮助已经被自动生成了,如下:

snippet --help
  Usage: snippet [options] <file>
  Options:
    -h, --help                 output usage information
    -u, --username <username>  The user to authenticate as
    -p, --password <password>  The user's password
</password></username></file>

用户的交互

可以使用内置的process.stdin来处理,

但是可以使用第三方模块co-prompt,安装如下:
npm install –save co co-prompt

修改上面的如下:

+ var co = require('co');
+ var prompt = require('co-prompt');
  var program = require('commander');
...

  .option('-u, --username <username>', 'The user to authenticate as')
  .option('-p, --password <password>', 'The user's password')
  .action(function(file) {
+    co(function *() {
+      var username = yield prompt('username: ');
+      var password = yield prompt.password('password: ');
       console.log('user: %s pass: %s file: %s',
-          program.username, program.password, file);
+          username, password, file);
+    });
  })
</password></username>

然后运行:

snippet my_awesome_file
username: kannonboy
password: *************************
user: kannonboy pass: correcthorsebatterystaple file: my_awesome_file

Original: https://www.cnblogs.com/itech/p/13137849.html
Author: iTech
Title: nodejs参数的处理与用户的交互

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/552009/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 2022.13 三维运动追踪

    北京冬奥会主题歌演唱环节,几百个孩子手举发光的和平鸽在鸟巢中央奔跑,孩子跑过,脚下的屏幕随即亮起雪花。有人以为雪花是提前做出来的,有人以为地屏有触感,踩到就有反应。其实,这种实时交…

    技术杂谈 2023年5月30日
    079
  • python中的反射

    python反射简介 所谓反射是指通过字符串的方式获取对象,然后执行对象的属性或方法。在python中一切皆对象,因此我们可以对一切事物进行发射。 关于反射python为我们提供了…

    技术杂谈 2023年7月11日
    086
  • JAVA的类型转换(基本类型)

    ; ; 类型转换 由于java是强类型语言,所以在进行某些运算的时候,需要用到类型转换。 低–>高指的是字节大小,从小到大。 小数的优先级大于整数 数值进行类型转…

    技术杂谈 2023年6月21日
    097
  • dup和dup2用法小结

    今天和同学探讨了一下关于重定向输出到文件的问题,其中需要用到dup和dup2函数,因此来小小的总结一下。 首先来man一下: dup直接返回一个新的描述符和原来的描述符一样代表同一…

    技术杂谈 2023年6月21日
    094
  • Django Not Found: /static/admin/css/login.css

    出现问题: Not Found: /static/admin/css/login.css 原因: 缺失 /static/admin/ django.core.exceptions….

    技术杂谈 2023年5月30日
    095
  • Spring的自动装配和注解

    自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean。 Spring的自动装配需要从两个角度来实现,或者说是两个操作…

    技术杂谈 2023年7月11日
    069
  • Java — 枚举

    枚举是 JDK5 中引入的特性,由 enum 关键字来定义一个枚举类。 格式: enum 枚举类名 { 枚举项1, 枚举项2, …; 成员变量; 构造方法 成员方法 } 说明:…

    技术杂谈 2023年7月11日
    079
  • MySQL慢查询优化问题-解决办法

    根据发现的问题,找到原因,然后对症下药 发现问题(主动/被动) 问题点:数据库查询过程中速度过慢的SQL语句 主动:数据库默认情况下slow_query_log的值为OFF,表示慢…

    技术杂谈 2023年6月21日
    0100
  • 剑指offer计划链表

    剑指offer计划链表 从尾到头打印链表 /** * public class ListNode { * int val; * ListNode next = null; * * …

    技术杂谈 2023年7月25日
    068
  • 2019 第十届蓝桥杯大赛软件类省赛 Java A组 题解

    试题A ​ 题目最后一句贴心的提示选手应该使用 long (C/C++ 应该使用 long long)。 ​ 本题思路很直白,两重循环。外层循环 1 到 2019,内层循环检验是否…

    技术杂谈 2023年7月24日
    074
  • 三分钟小短文:一致性非锁定读与一致性锁定读

    台上三分钟,台下三小时,兄弟们,今天咱们花三分钟了解下数据库中的两种读(select)操作: 一致性非锁定读 和 一致性锁定读 一致性非锁定读 一致性非锁定读是什么?这里我先给出一…

    技术杂谈 2023年7月25日
    086
  • mysql中all用法和any的用法和内连接和外连接,全外连接,联合查询,自连接

    与子查询配合使用 在all的用法中,有三种 语法:select 列名 from 表名 where 列名 <> all(select 列名 from 表名 where 条…

    技术杂谈 2023年7月24日
    056
  • Java-SpringBoot-使用多态给项目解耦

    Java-SpringBoot-使用多态给项目解耦 提及 今天在打算维护一下智慧社区这个项目的时候,想到项目是使用Satoken这个开箱即用的授权和认证的组件,因为在项目开启的时候…

    技术杂谈 2023年6月21日
    0103
  • Concurrent包详解及使用场景

    1.阻塞式队列 – BlockingQueue 遵循先进先出(FIFO)的原则。阻塞式队列本身使用的时候是需要指定界限的。 在生产者消费者模型中,生产数据和消费数据的速…

    技术杂谈 2023年5月30日
    092
  • Java复习,Java知识点以及Java面试题(七)

    IO流 用来处理设备之间的数据传输 IO流的分类:按流向:输入流(读取数据);输出流(写出数据) 按数据类型:字节流: 字节输入流 读取数据 InputStream 字节输出流 写…

    技术杂谈 2023年6月21日
    058
  • linux下安装jdk8

    1、下载jdk8安装包 2、拷贝到指定目录下(比如:/usr/package) 3、解压到安装目录下(比如:/usr/soft/java) tar -zxvf jdk-8u121-…

    技术杂谈 2023年6月21日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球