【问题标题】:Nodejs Process CLI Variable Containing ObjectNodejs进程CLI变量包含对象
【发布时间】:2017-02-14 23:34:06
【问题描述】:

我对使用 process.argv 的 NodeJS CLI 命令能够将包含对象的变量传递给我的函数方法非常陌生,但似乎在此过程中找不到我的对象中的属性值叫。我在我的对象siteUrl 的第二个属性处收到一个错误,并且似乎无法确定这是process.argv 编译信息的方式,还是我错误地使用了该命令。如果我用params 替换process.argv,那么我不会收到错误。

这是我的终端命令:

node app.js params

这是我的变量设置:

var siteUrl = encodeURIComponent('http://www.test.com/');

    var params = {
        auth: auth,
        siteUrl: siteUrl,
        resource: {
            'startDate': moment().subtract(3, 'days').format("YYYY-MM-DD"),
            'endDate': moment().subtract(2, 'days').format("YYYY-MM-DD"),
            'dimensions': ['query', 'page'],
            'dimensionFilterGroups': [{
              'filters': [{
                'dimension': 'country',
                'operator': 'equals',
                'expression': 'USA'
              }]
            }]
        }

这是我的方法

var query = webmasters.searchanalytics.query(process.argv, function(err, res){
      var formattedQueryList = [];
      if (err){
          console.log('This is the error: ' + err);
      } else { ... }

我也在记录我的对象以确保值存在:

 console.log(params.resource.startDate)
    console.log(params.resource.startDate)
    console.log(params.resource.endDate)
    console.log(params.siteUrl)
    console.log(siteUrl)

这是控制台日志:

2017-02-11
2017-02-12
http%3A%2F%2Fwww.test.com%2F
http%3A%2F%2Fwww.test.com%2F
This is the error: Error: Missing required parameters: siteUrl

【问题讨论】:

  • process.argv 是字符串数组,而不是对象

标签: node.js argv


【解决方案1】:

当您传递参数节点时,将其视为字符串。所以你必须注意 Json 的格式。
例如
你要传递一个对象人,这里可以显式设置\"
node lib/index.js {\"name\":\"Bob\"}

或者以不同的方式使用 ' 包装 json:
node lib/index.js '{"name":"Bob"}'

在您的代码中,您应该将字符串解析为 JSON。

const obj =  JSON.parse( process.argv[2] );
console.log(obj);
console.log('Hello ' + obj.name);

这会给你Hello Bob。在您的情况下,您可以在将 JSON.stringify(params) 作为参数传递之前使用它。
希望这有助于澄清。

【讨论】:

  • 感谢您的解释和可能的解决方案。我认为实际上最好使用 process.argv 来填充我的对象中的各个属性值,而不是我目前的方法
【解决方案2】:

process.argv 是您附加到终端命令的参数列表。

在您的情况下,process.argv[2] 将是字符串 params,而不是实际的变量值。您要么需要通过 CLI 传递 JSON 本身(通过适当的转义),然后使用 JSON.parse 解析它,要么手动检查 process.argv[2] 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 2018-04-13
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2020-08-09
    相关资源
    最近更新 更多