1

我正在通过命令行向Node JS脚本传递9个参数。以下是我的命令:

节点awsInvokeDelete.js删除https://Test1234.execute-api.us-west-2.amazonaws.comus-west-2/qa/transit-connectivit/api/v1/sites/tdcloudtsttd03 AKIAJ4Y5DGqwewqeqw CFdAgsdtqweqwe/SKqDezdqweewofWrUXXBbQoMy'{\“change_request\”:\“chg0123456\”}'

我将查询参数作为JSON传递到命令行参数中,该参数是节点JS脚本中的process.argv[9]。若我将值传递给所有参数,但在某些情况下,process.argv[8]将为空,那个么它会很好地工作。当我在process.argv[8]中传递空值时,它实际上将argv[9]作为argv[4]。

如何在以下脚本的命令行中传递空参数值。

var apigClientFactory=require('aws-api-gateway-client').default;让awsMethod=进程.argv[2],awsEndpoint=进程.argv[3],awsRegion=进程.argv[4],awsPathTemplate=进程.argv[5],awsAccessKey=进程.argv[6],awsSecreteKey=进程.argv[7],awsPathParams=进程.argv[8],awsAdditionalParams=JSON.parse(process.argv[9]||'{}');var apigClient=apigClientFactory.newClient({invokeUrl:awsEndpoint,//必需accessKey:awsAccessKey,//必需secretKey:awsSecretKey,//必需region:awsRegion,//REQUIRED:部署API的区域。retryCondition:(err)=>{//可选:如果应重试请求。使用轴突重试插件。return err.response&&err.resposese.status===500;}});var param=awsPathParams;//模板语法遵循url-Templatehttps://www.npmjs.com/package/url-template网站var pathTemplate=awsPathTemplate;var方法=awsMethod;var additionalParams={queryParams:awsAdditionalParam,};console.log(其他参数);var体={};apigClient.invokeApi(param,pathTemplate,method,additionalParams,body).then(函数(结果){//console.log(result.data+“:”+结果)console.log(result.response.data)}).catch(函数(结果){console.log(result.response.data)});

输出如下:args[8]的值应显示为args[9]

参数[8]:{“change_request”:“chg0123456”}参数[9]:[对象对象]

2个答案2

重置为默认值
2

您的脚本无法处理您提供的输入(如果您确实添加了缺少的参数),因为'{\“change_request\”:\“chg0123456\”}'JS无法将其解析为JSON字符串。此外,您没有将输入中的任何空值传递给脚本(只是空空间不被视为实际输入)。

你需要把它改成这个'{“change_request”:“chg0123456”}'并将空值作为空字符串传递''.

此输入工作正常。

节点index.js删除https://Test1234.execute-api.us-west-2.amazonaws.comus-west-2/qa/transit-connectivit/api/v1/sites/tdcloudtsttd03 AKIAJ4Y5DGqwewqeqw CFdAgsdtqweqwe/SKqDezdqweewofWrUXXBbQoMy“”{“change_request”:“chg0123456”}'

如果确实需要该格式的对象,则需要删除\在你调用之前JSON.parse格式在上面。

awsAdditionalParams=JSON.parse(进程.argv[9].split('\\').join('')|'{}');

如果您首先要检查最后一个参数是否为空,然后才运行上面的代码,则可以像这样使用三元运算符。

awsAdditionalParams=进程.argv[9]? JSON.parse(process.argv[9].split('\\').join('')||'{}'): '';
  • 谢谢马图斯,这很有帮助。我还有一个问题,关于在节点js脚本中添加If条件。我修改了代码,删除了“\\”,然后解析Json格式,并将“”作为空字符串传递,工作正常。 评论 2019年1月16日22:21
  • 我还有一个问题,如果args[9]没有任何参数,意味着空,那么我如何检查args[9]是否为空,如果不是,那么只检查“JSON.parse(process.argv[9].split('\\').join('')||'{}');” 评论 2019年1月16日22:22
  • @KiranPatil我加了它来回答。 评论 2019年1月16日22:31
0

3个选项:

  1. 更改脚本以切换参数8和9。那么即使9是空的,你总是有相同的数字。
  2. 将参数作为“”传递,而不是什么都不传递。
  3. 更改脚本,以便解析自己的命令行,并根据自己的喜好进行更改。

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.