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 ответа:
При передаче аргумента узел обрабатывает его как строку. Так что вам придется позаботиться о формировании 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]
.