我有一个用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中访问这些参数?不知怎么的,我在网上找不到这些信息。
当前回答
whithout libraries:使用Array.protocol.reduce()
const args = process.argv.slice(2).reduce((acc, arg) => {
let [k, v = true] = arg.split('=')
acc[k] = v
return acc
}, {})
对于此命令节点,index.js count=2 print debug=false msg=hi
console.log(args) // { count: '2', print: true, debug: 'false', msg: 'hi' }
而且
我们可以改变
let [k, v = true] = arg.split('=')
acc[k] = v
由(更长)
let [k, v] = arg.split('=')
acc[k] = v === undefined ? true : /true|false/.test(v) ? v === 'true' : /[\d|\.]+/.test(v) ? Number(v) : v
自动分析布尔数字(&N)
console.log(args) // { count: 2, print: true, debug: false, msg: 'hi' }
其他回答
命令.js
非常适合定义您的选项、行动和论点。它还为您生成帮助页面。
迅速
如果您喜欢回调方法,则非常适合从用户获取输入。
共同提示
如果您喜欢生成器方法,则非常适合从用户获取输入。
您可以使用system.args获取命令行参数。我使用下面的解决方案将参数解析为一个对象,这样我就可以按名称获取所需的参数。
var system = require('system');
var args = {};
system.args.map(function(x){return x.split("=")})
.map(function(y){args[y[0]]=y[1]});
现在你不需要知道参数的索引。像args.whatever一样使用它
注意:应该使用file.js x=1y=2这样的命名参数这一解决方案。
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
最初的问题是要求传递命令行参数,而不是更复杂的参数解析。然而,面对所有复杂的答案,他们都错过了一个简单而有用的变化。
你知道Unix shell支持命名参数吗?这可以追溯到20世纪80年代最初的伯恩贝壳。用法很简单:
$ FOO=one BAR=two nodejs myscript.js
要获取Javascript中的参数:
var foo = process.env.FOO;
var bar = process.env.BAR;
一旦超过两个或三个参数,命名参数就更容易读取。可选参数很简单,顺序也不固定。
(这甚至可以在Windows上运行,因为最近支持Unix shell。)
而且,几乎没有Unix程序员知道这种用法
传递、解析参数是一个简单的过程。Node为您提供process.argv属性,它是字符串数组,是调用Node时使用的参数。数组的第一个条目是Node可执行文件,第二个条目是脚本的名称。
如果您使用以下参数运行脚本
$ node args.js arg1 arg2
文件:args.js
console.log(process.argv)
您将获得类似数组的
['node','args.js','arg1','arg2']