我有一个用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中访问这些参数?不知怎么的,我在网上找不到这些信息。
当前回答
如果您的脚本名为myScript.js,并且希望将名和姓“Sean Worthington”作为如下参数传递:
node myScript.js Sean Worthington
然后在脚本中写下:
var firstName = process.argv[2]; // Will be set to 'Sean'
var lastName = process.argv[3]; // Will be set to 'Worthington'
其他回答
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
2018年答案基于当前野外趋势:
Vanilla javascript参数解析:
const args = process.argv;
console.log(args);
这将返回:
$ node server.js one two=three four
['node', '/home/server.js', 'one', 'two=three', 'four']
官方文件
用于参数分析的最常用的NPM包:
Minimist:用于最小参数解析。
Commander.js:参数解析最常用的模块。
喵:Commander.js的更轻替代品
Yargs:更复杂的参数解析(重)。
Vorpal.js:具有参数解析功能的成熟/交互式命令行应用程序。
命令.js
非常适合定义您的选项、行动和论点。它还为您生成帮助页面。
迅速
如果您喜欢回调方法,则非常适合从用户获取输入。
共同提示
如果您喜欢生成器方法,则非常适合从用户获取输入。
最新的正确答案是使用最小化库。我们曾经使用节点乐观主义,但现在已经被弃用了。
下面是一个如何直接从最小化文档中使用它的示例:
var argv = require('minimist')(process.argv.slice(2));
console.dir(argv);
-
$ node example/parse.js -a beep -b boop
{ _: [], a: 'beep', b: 'boop' }
-
$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
{ _: [ 'foo', 'bar', 'baz' ],
x: 3,
y: 4,
n: 5,
a: true,
b: true,
c: true,
beep: 'boop' }
项目.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]。