Аргумент нулевой линии Коммонда - PullRequest
0 голосов
/ 17 января 2019

Я передаю 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\"}'

Я передаю параметр запроса в виде JSON в аргументе командной строки, который является process.argv [9] в сценарии JS узла. Это работает отлично, если я передам значение всем параметрам, но в некоторых случаях 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]

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Ваш сценарий не работает с введенным вами вводом (если вы на самом деле добавляете отсутствующий аргумент), потому что '{\"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('') || '{}')
    : '';
0 голосов
/ 17 января 2019

3 варианта:

  1. изменить скрипт, чтобы переключаться между аргументами 8 и 9. тогда у вас всегда будет одно и то же число, даже если 9 пусто.
  2. передать аргумент как "" вместо ничего.
  3. измените сценарий так, чтобы вы анализировали свою собственную командную строку и изменяли все, что захотите.
...