NodeJS 研究笔记:命令行处理

在启动Node程序时,我们希望能在命令行启动时,传入参数,Node程序根据输入的命令参数,执行相应的处理流程。

 

在Node程序中,使用process.argv 获取命令行输入参数。Process.argv 是一个数组,用于存放从命令行传入的参数。其类似C语言main 函数中的char* argv[].

假定我们在控制台输入 node argument.js –r arguments.js . 那么程序

argument.js 启动后, process.argv 数组中就就存储了以下几个字符串信息:

process.argv[0] = “node”, process.argv [1]= “argument.js”, process.argv [2] = “-r”

process.argv[3] = “argument.js”. 由于参数数组的前两个存储的是字符串”node”和源代码文件名,要想获得有效的输入参数,我们一般会从process.argv[2] 开始处理。

 

举个例子,arguments.js 的代码内容如下:

var args = {
 '-h': displayHelp,
 '-r': readFile
};

function displayHelp() {
    console.log('Argument processor:', args);
}

function readFile(file) {
    if (file && file.length) {
       console.log('Reading:' ,file);
       console.time('read');
       var stream = require('fs').createReadStream(file);

       stream.on('end', function() {
          console.timeEnd('read');
       });

       stream.pipe(process.stdout);
    }
    else {
        console.error('A file must be provided with the -r option');
        process.exit(1);
    }
  }

    if (process.argv.length > 0) {

        process.argv.forEach(function(arg, index) {
            if (arg === '-r' || arg === '-h') {                  
              console.log(process.argv.slice(index + 1));         
              args[arg].apply(this, process.argv.slice(index+1));
            }
        });
    }


args 对象存储了对应参数要执行的对应函数,例如输入参数是 -r 那么执行readFile 函数, 如果输入参数-h 则执行displayHelp 函数。 readFile 函数被调用时,传入的参数是要读取的文件名。通过Node 的文件系统模块 fs 所提供的接口调用createReadStream, 将指定文件名的文件内容读入形成输入流对象,然后再通过输入流对象的pipe函数,将输入流中的所有数据内容,重定向到标准输出,其实也就是输出到控制台。


在末尾的if 判断中,先看看是否有输入参数需要解析,如果有,那么process.argv.length 大于0. 接着查看参数数组中的每个元素的内容。看看是否有程序需要处理的-r 或 -h  参数,如果有,那么从args对象中,获取相应参数的响应函数,-r 或 -h 后面的参数,则作为响应函数的输入参数。如果我们输入的命令行参数如下:

Node argument.js -r argument.js


那么 代码中的  args[arg].apply(this, process.argv.slice(index)) 其实就等价于:

readFile("argument.js")

程序执行的结果是,将argument.js的内容输出的控制台:



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值