在启动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));
}
});
}
在末尾的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的内容输出的控制台: