2017-02-14 3 views
2

Ich bin sehr neu mit dem NodeJS CLI-Befehl von process.argv, um eine Variable mit einem Objekt an meine Funktion Methode übergeben zu können, aber es scheint, dass die Eigenschaftswerte in meinem Objekt nicht gefunden werden wenn dieser Prozess aufgerufen wird. Ich erhalte einen Fehler bei der zweiten Eigenschaft meines Objekts siteUrl und kann nicht herausfinden, ob es so ist, dass process.argv Informationen kompiliert oder wenn ich den Befehl falsch verwende. Wenn ich process.argv durch params ersetze, erhalte ich keine Fehler.Nodejs Process CLI-Variable, die Objekt enthält

Hier ist mein Terminal-Befehl:

node app.js params

Hier meine variable Einstellung ist:

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' 
       }] 
      }] 
     } 

Hier ist meine Methode

var query = webmasters.searchanalytics.query(process.argv, function(err, res){ 
     var formattedQueryList = []; 
     if (err){ 
      console.log('This is the error: ' + err); 
     } else { ... } 

Ich Anmeldung auch mein Ziel um sicherzustellen, dass Werte vorhanden sind:

console.log(params.resource.startDate) 
    console.log(params.resource.startDate) 
    console.log(params.resource.endDate) 
    console.log(params.siteUrl) 
    console.log(siteUrl) 

hier ist die console.log:

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 
+0

'process.argv' ist ein Array von Strings und kein Objekt –

Antwort

2

Wenn Sie ein Argument Knoten behandeln es als String übergeben. Sie müssen also auf die JSON-Formatierung achten.
z.B.
Sie wollen ein Objekt Person zu übergeben, können Sie hier explizit die \“ gesetzt
node lib/index.js {\"name\":\"Bob\"}

oder auf eine andere Weise mit ' die json Verpackung.
node lib/index.js '{"name":"Bob"}'

Und in Ihrem Code, sollten Sie die Zeichenfolge als JSON parsen.

const obj = JSON.parse(process.argv[2]); 
console.log(obj); 
console.log('Hello ' + obj.name); 

welche geben Ihnen Hello Bob . In Ihrem Fall können Sie vielleicht JSON.stringify(params) verwenden, bevor Sie es als Argument übergeben.
Hoffe, diese Hilfe zu klären.

+0

danke für die Erklärung und mögliche Lösung. Ich denke, es ist möglicherweise am besten, process.argv zu verwenden, um die einzelnen Eigenschaftswerte in meinem Objekt zu füllen, anstatt meinen derzeitigen Ansatz – cphill

0

process.argv ist eine Liste der Parameter, die Sie an den Terminalbefehl anhängen. In Ihrem Fall ist process.argv[2] die Zeichenkette params und nicht der tatsächliche Variablenwert. Sie müssen entweder den JSON selbst (mit ordnungsgemäßem Escaping) über die CLI übergeben, dann mit JSON.parse analysieren oder den Wert process.argv[2] manuell überprüfen.