Nodejs процесс командной строки переменной, содержащей объект


Я очень новичок в использовании команды NodeJS CLI process.argv, чтобы иметь возможность передавать переменную, содержащую объект, в мой метод функции, но кажется, что значения свойств в моем объекте не находятся при вызове этого процесса. Я получаю ошибку во втором свойстве моего объекта siteUrl и, кажется, не могу понять, является ли это способом, которым process.argv компилирует информацию, или я неправильно использую команду. Если я заменяю process.argv на params, то я не получаю ошибки.

Вот моя команда терминала:

node app.js params

Вот моя переменная setup:

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)

Вот консоль.журнал:

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
2 2

2 ответа:

При передаче аргумента узел обрабатывает его как строку. Так что вам придется позаботиться о формировании Json.
например
Вы хотите передать объект человеку, здесь вы можете явно задать \".
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, а не фактическим значением переменной. Вам нужно либо передать сам JSON (с соответствующим экранированием) через CLI, затем разобрать его с помощью JSON.parse, либо вручную проверить значение process.argv[2].