包含对象的Nodejs进程CLIvariables

我很新的使用process.argv的NodeJS CLI命令能够将包含对象的variables传递给我的函数方法,但似乎在调用此进程时,我的对象内的属性值不会被find。 我在我的对象siteUrl的第二个属性收到一个错误,似乎无法弄清楚,如果这是process.argv编译信息的方式,或者如果我错误地使用该命令。 如果我用paramsreplaceprocess.argv ,那么我不会收到错误。

这是我的terminal命令:

node app.js params

这是我的variables设置:

 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 { ... } 

我也logging我的对象,以确保值存在:

  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 

当你通过一个参数节点把它当作string。 所以你必须照顾Json格式。
例如
你想传递一个对象的人,在这里你可以明确地设置\“
node lib/index.js {\"name\":\"Bob\"}

或者以包装json:
node lib/index.js '{"name":"Bob"}'

而在你的代码中,你应该把stringparsing为JSON。

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

这会给你Hello Bob 。 在你的情况下,你可能可以使用JSON.stringify(params)作为parameter passing之前。
希望这个帮助澄清。

process.argv是附加到terminal命令的参数列表。

在你的情况, process.argv[2]将是stringparams ,而不是实际的variables值。 您需要通过CLI传递JSON本身(通过适当的转义),然后使用JSON.parseparsing它,或手动检查process.argv[2]的值。