Nodejs 进程 CLI 变量包含对象
Nodejs Process CLI Variable Containing Object
我对使用 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)
这里是 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 格式。
例如
你想传递一个对象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)
。
希望这有助于澄清。
process.argv
是您附加到终端命令的参数列表。
在您的例子中,process.argv[2]
将是字符串 params
,而不是实际的变量值。您需要通过 CLI 传递 JSON 本身(通过适当的转义),然后使用 JSON.parse
解析它,或者手动检查 process.argv[2]
.
的值
我对使用 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)
这里是 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 格式。
例如
你想传递一个对象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)
。
希望这有助于澄清。
process.argv
是您附加到终端命令的参数列表。
在您的例子中,process.argv[2]
将是字符串 params
,而不是实际的变量值。您需要通过 CLI 传递 JSON 本身(通过适当的转义),然后使用 JSON.parse
解析它,或者手动检查 process.argv[2]
.