包含对象的Nodejs进程CLIvariables
我很新的使用process.argv
的NodeJS CLI命令能够将包含对象的variables传递给我的函数方法,但似乎在调用此进程时,我的对象内的属性值不会被find。 我在我的对象siteUrl
的第二个属性收到一个错误,似乎无法弄清楚,如果这是process.argv
编译信息的方式,或者如果我错误地使用该命令。 如果我用params
replaceprocess.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.parse
parsing它,或手动检查process.argv[2]
的值。