2017-02-14 4 views
2

NodeSS CLIコマンドprocess.argvを使用すると、オブジェクトを含む変数を関数メソッドに渡すことができますが、オブジェクト内のプロパティ値が見つからないようですこのプロセスが呼び出されたとき。オブジェクトsiteUrlの2番目のプロパティでエラーが発生していて、process.argvの情報がコンパイルされているかどうか、またはコマンドを間違って使用しているかどうかはわかりません。 process.argvparamsに置き換えた場合、エラーは発生しません。ここでNodejsプロセスCLI変数を含むオブジェクト

は私のターミナルコマンドです:ここで

node app.js params

は私の変数の設定です:ここでは

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) 

に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'はオブジェクトではなく文字列の配列です –

答えて

2

あなたは、引数ノードを渡し、それを文字列として扱います。だからあなたはJson formatingの世話をする必要があります。

あなたが明示的に「\ を設定することができます"
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)を引数として渡す前に使用することができます。
このヘルプを参考にしてください。

+0

説明と可能な解決方法をありがとうございます。私は実際に私の現在のアプローチではなく、私のオブジェクト内の個々のプロパティ値を設定するためにprocess.argvを使用するのが最善であると思います – cphill

0

process.argvは、terminalコマンドに追加するパラメータのリストです。

process.argv[2]は実際の変数値ではなく、paramsという文字列になります。 CLI経由でJSON自体(適切なエスケープあり)を渡してから、JSON.parseで解析するか、手動でprocess.argv[2]の値をチェックする必要があります。

関連する問題