我有一个用Node.js编写的web服务器,我想用一个特定的文件夹启动。我不知道如何在JavaScript中访问参数。我运行的节点如下:
$ node server.js folder
这里server.js是我的服务器代码。Node.js帮助说这是可能的:
$ node -h
Usage: node [options] script.js [arguments]
如何在JavaScript中访问这些参数?不知怎么的,我在网上找不到这些信息。
我有一个用Node.js编写的web服务器,我想用一个特定的文件夹启动。我不知道如何在JavaScript中访问参数。我运行的节点如下:
$ node server.js folder
这里server.js是我的服务器代码。Node.js帮助说这是可能的:
$ node -h
Usage: node [options] script.js [arguments]
如何在JavaScript中访问这些参数?不知怎么的,我在网上找不到这些信息。
当前回答
传递、解析参数是一个简单的过程。Node为您提供process.argv属性,它是字符串数组,是调用Node时使用的参数。数组的第一个条目是Node可执行文件,第二个条目是脚本的名称。
如果您使用以下参数运行脚本
$ node args.js arg1 arg2
文件:args.js
console.log(process.argv)
您将获得类似数组的
['node','args.js','arg1','arg2']
其他回答
您可以解析所有参数并检查它们是否存在。
文件:parse-cli-arguments.js:
module.exports = function(requiredArguments){
var arguments = {};
for (var index = 0; index < process.argv.length; index++) {
var re = new RegExp('--([A-Za-z0-9_]+)=([A/-Za-z0-9_]+)'),
matches = re.exec(process.argv[index]);
if(matches !== null) {
arguments[matches[1]] = matches[2];
}
}
for (var index = 0; index < requiredArguments.length; index++) {
if (arguments[requiredArguments[index]] === undefined) {
throw(requiredArguments[index] + ' not defined. Please add the argument with --' + requiredArguments[index]);
}
}
return arguments;
}
不仅仅是这样:
var arguments = require('./parse-cli-arguments')(['foo', 'bar', 'xpto']);
Stdio库
在NodeJS中解析命令行参数的最简单方法是使用stdio模块。受UNIX getopt实用程序的启发,它非常简单:
var stdio = require('stdio');
var ops = stdio.getopt({
'check': {key: 'c', args: 2, description: 'What this option means'},
'map': {key: 'm', description: 'Another description'},
'kaka': {args: 1, required: true},
'ooo': {key: 'o'}
});
如果使用此命令运行前面的代码:
node <your_script.js> -c 23 45 --map -k 23 file1 file2
那么ops对象将如下所示:
{ check: [ '23', '45' ],
args: [ 'file1', 'file2' ],
map: true,
kaka: '23' }
所以你可以随心所欲地使用它。例如:
if (ops.kaka && ops.check) {
console.log(ops.kaka + ops.check[0]);
}
还支持分组选项,因此您可以编写-om而不是-o-m。
此外,stdio可以自动生成帮助/用法输出。如果调用ops.printHelp(),将得到以下结果:
USAGE: node something.js [--check <ARG1> <ARG2>] [--kaka] [--ooo] [--map]
-c, --check <ARG1> <ARG2> What this option means (mandatory)
-k, --kaka (mandatory)
--map Another description
-o, --ooo
如果未提供强制选项(前面有错误消息)或指定错误(例如,如果为选项指定了一个参数,并且需要2),也会显示上一条消息。
您可以使用NPM安装stdio模块:
npm install stdio
没有将标志格式化为简单对象的库
function getArgs () {
const args = {};
process.argv
.slice(2, process.argv.length)
.forEach( arg => {
// long arg
if (arg.slice(0,2) === '--') {
const longArg = arg.split('=');
const longArgFlag = longArg[0].slice(2,longArg[0].length);
const longArgValue = longArg.length > 1 ? longArg[1] : true;
args[longArgFlag] = longArgValue;
}
// flags
else if (arg[0] === '-') {
const flags = arg.slice(1,arg.length).split('');
flags.forEach(flag => {
args[flag] = true;
});
}
});
return args;
}
const args = getArgs();
console.log(args);
示例
易于理解的
输入
node test.js -D --name=Hello
输出
{ D: true, name: 'Hello' }
真实世界
输入
node config/build.js -lHRs --ip=$HOST --port=$PORT --env=dev
输出
{
l: true,
H: true,
R: true,
s: true,
ip: '127.0.0.1',
port: '8080',
env: 'dev'
}
项目.js
for(var i=0;i<process.argv.length;i++){
console.log(process.argv[i]);
}
终端:
nodemon app.js "arg1" "arg2" "arg3"
结果:
0 'C:\\Program Files\\nodejs\\node.exe'
1 'C:\\Users\\Nouman\\Desktop\\Node\\camer nodejs\\proj.js'
2 'arg1' your first argument you passed.
3 'arg2' your second argument you passed.
4 'arg3' your third argument you passed.
解释:
计算机中node.exe的目录(C:\Program Files\nodejs\node.exe)项目文件的目录(项目js)节点(arg1)的第一个参数节点的第二个参数(arg2)节点的第三个参数(arg3)
实际参数从argv数组的第二个索引开始,即process.argv[2]。
使用最小npm包。这是最简单的方法,不需要担心任何事情。
const arguments = require("minimist")(process.argv.slice(2));
// get the extra argument of command line .
eg node app.js --process="sendEmailWithReminder"
我们也可以在windows任务调度程序中使用它。