【问题标题】:Getting Array as a raw command line argument将数组作为原始命令行参数
【发布时间】:2016-02-17 07:40:44
【问题描述】:

我正在尝试在 Node.js 中实现原始命令行参数。

当我实现简单的变量时,一切正常

(node example.js variable)

但是当我将数组作为参数实现时,它不起作用

(node example.js "['127.0.0.5', '127.0.0.3']" )

完整代码:

if (process.argv.length <= 3) {
    console.log("Usage: " + __filename + " SOME_PARAM");
    process.exit(-1);
}

var variable = process.argv[2];
var array = process.argv[3];

console.log('Host: ' + variable);
console.log('array: ' + array);

问题

参数输入示例(node example.js variable "['127.0.0.5', '127.0.0.3']"

如何将第二个参数 ("['127.0.0.5', '127.0.0.3']") 作为数组而不是字符串(现在这样)传递,以便稍后我可以访问数组的第 n 个元素(例如 array[0] = '127.0.0.5'

解决方案

输入应该类似于('["127.0.0.5", "127.0.0.3"]' 更改引号),我们还需要将参数解析为 JSON。

if (process.argv.length <= 3) {
    console.log("Usage: " + __filename + " SOME_PARAM");
    process.exit(-1);
}

var variable = process.argv[2];
var array = JSON.parse(process.argv[4]);

console.log('Host: ' + variable);
console.log('array: ' + array);
console.log(array[1]

【问题讨论】:

  • 您不能“将其作为数组传递”,但您可以解析参数来构建您的数组。无论如何,您都会得到一个字符串,由您将其转换为数组。

标签: javascript arrays node.js arguments


【解决方案1】:

这是一个老问题,但如果有人仍在寻找简单的解决方案,那就是。

使用相同名称多次传递命名参数。

node example.js --variable=127.0.0.5 --variable=127.0.0.3

使用minimist NPM包提取args为:

const parseArgs = require('minimist');

const args = parseArgs(process.argv.slice(2));
console.log(args.variable);

输出:

[ '127.0.0.5', '127.0.0.3' ]

【讨论】:

  • 尝试编辑帖子但“编辑队列已满”,所以我将其作为评论。您可能需要添加 -- 以便 npm 识别命令行变量。node example.js -- --variable=127.0.0.5 --variable=127.0.0.3
  • 对于一个只需要传递值的数组,我用 implode 将整个东西转换为逗号分隔的字符串,然后在 JS 端做了一个 string.split(','),用那个我能够将我从 PHP 数组中获得的值提供给 Node 脚本。我想对于一个简单的情况,这可以做到..
【解决方案2】:

您将无法传递数组。您必须做的(并且可能正在做的事情)是将数组转换为 JSON 字符串之类的东西。

在应用程序中,您只需执行 JSON.parse() 即可将您的数组从字符串中取出。

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2021-11-14
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多