node.js - 空通用行参数
问题描述
我通过命令行将大约 9 个参数传递给 Node JS 脚本。这是我的命令:
node awsInvokeDelete.js DELETE https://Test1234.execute-api.us-west-2.amazonaws.com us-west-2 /qa/transit-connectivity/api/v1/sites/tdcloudtsttd03 AKIAJ4Y5DGqwewqeqw CFdAgsdtqweqwe/SKqDezdqweewofWrUXXBbQoMy '{\"change_request\":\"chg0123456\"}'
我在节点 JS 脚本中的 process.argv[9] 命令行参数中将查询参数作为 JSON 传递。如果我将值传递给所有参数,但在某些情况下 process.argv[8] 将为空,它会完美运行。当我在 process.argv[8] 中传递空值时,它实际上将 argv[9] 作为 argv[8]。
如何在命令行中为下面的脚本传递空参数值。
var apigClientFactory = require('aws-api-gateway-client').default;
let awsMethod = process.argv[2],
awsEndpoint = process.argv[3],
awsRegion = process.argv[4],
awsPathTemplate = process.argv[5],
awsAccessKey = process.argv[6],
awsSecreteKey = process.argv[7],
awsPathParams = process.argv[8],
awsAdditionalParams = JSON.parse(process.argv[9] || '{}');
var apigClient = apigClientFactory.newClient({
invokeUrl: awsEndpoint, // REQUIRED
accessKey: awsAccessKey, // REQUIRED
secretKey: awsSecreteKey, // REQUIRED
region: awsRegion, // REQUIRED: The region where the API is deployed.
retryCondition: (err) => { // OPTIONAL: Callback to further control if
request should be retried. Uses axon-retry plugin.
return err.response && err.response.status === 500;
}
});
var param = awsPathParams;
// Template syntax follows url-template https://www.npmjs.com/package/url-template
var pathTemplate = awsPathTemplate;
var method = awsMethod;
var additionalParams = { queryParams: awsAdditionalParams, };
console.log(additionalParams);
var body = {};
apigClient.invokeApi(param, pathTemplate, method, additionalParams, body)
.then(function(result) {
//console.log(result.data + ": " +result)
console.log(result.response.data)
}).catch(function(result) {
console.log(result.response.data)
});
这是输出:args[8] 的值应显示为 args[9]
args[8]: {"change_request":"chg0123456"}
args[9]: [object Object]
解决方案
您的脚本无法处理您提供的输入(如果您实际上添加了缺少的参数),因为'{\"change_request\":\"chg0123456\"}'
JS 无法将其解析为 JSON 字符串。此外,您没有将输入中的任何空值传递给脚本(只是一个空白不被视为实际输入)。
您需要将其更改为此'{"change_request":"chg0123456"}'
并将空值作为空字符串传递''
。
此输入正常工作。
node index.js DELETE https://Test1234.execute-api.us-west-2.amazonaws.com us-west-2 /qa/transit-connectivity/api/v1/sites/tdcloudtsttd03 AKIAJ4Y5DGqwewqeqw CFdAgsdtqweqwe/SKqDezdqweewofWrUXXBbQoMy '' '{"change_request":"chg0123456"}'
如果您确实需要该格式的对象,那么您需要先从中删除\
字符,然后才能调用JSON.parse
它。
awsAdditionalParams = JSON.parse(
process.argv[9].split('\\').join('') || '{}'
);
如果你首先要检查最后一个参数是否不为空,然后才运行上面的代码,你可以像这样使用三元运算符。
awsAdditionalParams = process.argv[9]
? JSON.parse(process.argv[9].split('\\').join('') || '{}')
: '';
推荐阅读
- r - coord_cartesian 在闪亮的应用程序中不起作用
- pytorch - 在 Pytorch 中对张量应用一维卷积
- javascript - Electron 无法执行 Javascript 来检查 Div 是否存在
- python - 我用干净的二进制文件收到了这个错误: ValueError: invalid literal for int() with base 2: '01010000 01010101 01010100 01000001'
- python - 你好,我正在尝试安装频道,但它没有安装,因为它很难安装扭曲,我该怎么办?
- r - 在 R 中读取多个图像
- mapbox - 相对于 Mapbox GL JS 中的缩放级别缩放标记大小
- javascript - 在两个相等的 JSON 对象中,在 javascript 中访问值在一种情况下有效,另一种返回未定义
- python - 如何将嵌套 Json 中的列表提取到 CSV 中?
- java - java swing中的动画