Node.js 包含对象的Nodejs进程CLI变量

Node.js 包含对象的Nodejs进程CLI变量,node.js,argv,Node.js,Argv,我对使用process.argv的NodeJS CLI命令将包含对象的变量传递给我的函数方法非常陌生,但是调用此进程时,似乎找不到对象中的属性值。我在对象siteUrl的第二个属性处收到一个错误,似乎无法确定这是处理.argv编译信息的方式,还是我使用了错误的命令。如果将process.argv替换为params,则不会收到错误 这是我的终端命令: node app.js参数 以下是我的变量设置: var siteUrl = encodeURIComponent('http://www.test

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

这是我的终端命令:

node app.js参数

以下是我的变量设置:

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)
以下是console.log:

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

传递参数节点时,将其视为字符串。因此,您必须处理Json格式
e、 g.
如果要传递对象person,可以在此处显式设置\“
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)


希望这有助于澄清。

过程。argv是附加到终端命令的参数列表


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

进程。argv
是字符串数组,而不是对象谢谢您的解释和可能的解决方案。我认为实际上最好使用process.argv来填充对象中的各个属性值,而不是我当前的方法