2015-10-21 109 views
1

我有一個節點JS腳本,通過執行./test.js -n name1 -r us-east讀取命令行參數的多個值。這裏有兩個參數-n & -r每個傳遞適當的值。現在我必須介紹另一個參數-i,它將收到至少一個值,並且最多可以得到多個值。這意味着腳本的執行方式:在上面的例子論證-i如何訪問CLI參數

./test.js -n name1 -i 100 101 103 -r us-east 
  1. 如何找到參數值的數量對每個參數,例如有3值。

  2. 如何將這些值存儲到一個數組。

    var data = new Object(); 
    
    function usage() 
    { 
        return "test.js [-n|--name] [-i|--ids <id1 id2...>] [-r|--region] "; 
    } 
    
    function process_args() 
    { 
        var args = process.argv.slice(2); 
        var i; 
        for (i = 0; i > args.length; i++) 
        { 
         switch(args[i]) 
         { 
         case "-n": 
         case "--name": 
           i++; 
           if (i >= args.length) 
             error_exit_usage("Missing name argument"); 
           data.name =args[i]; 
           break; 
         case "-i": 
         case "--ids": 
           i++; 
           if (i >= args.length) 
             error_exit_usage("Missing ids argument"); 
           /* TODO */ 
           break; 
         case "-r": 
         case "--region": 
           i++; 
           if (i >= args.length) 
             error_exit_usage("Missing region argument"); 
           data.region = args[i]; 
           break; 
         } 
        } 
    } 
    

新建節點JS。

+1

是否有一個特定的原因,你使用自己的實現,而不是像https://www.npmjs.com/package/nomnom存在的東西? –

+0

你可以使用100-101-103論證這樣 –

+0

@FelixKling目前腳本需要'8'數量的參數在我的實現與上述'切換case'方法,因此不想改變它。 –

回答

1

我想你可以只是看在接下來的參數,只要它們的ID:

case "-i": 
case "--ids": 
    data.ids = []; 
    while (/^\d+$/.test(args[i])) { 
    data.ids.push(Number(args[i])); 
    i++; 
    } 
    if (data.ids.length === 0) { 
    error_exit_usage("Missing ids argument"); 
    } 
    break; 
1

試試這個:

function processArguments(args) { 

    var options = {}, optionName = null; 

    args.forEach(function (val, index, array) { 
     if (val.indexOf('-') === 0) { 
      optionName = val.replace('-', ''); 
      options[optionName] = []; 
     } else { 
      if (optionName != null) { 
       options[optionName].push(val); 
      } 
     } 
    }); 
    return options; 
} 

var options = processArguments(process.argv); 

console.log(options['n']); 
console.log(options['i']); 
console.log(options['r']); 
+0

如果(即-n)不那麼給出選項的typeof選項[「N」] ===「未定義」 –

1

使用commander和要挾我選項列表。以逗號分隔值傳入。見examples

上npmjs.com或node-modules.com始終搜索或使用modsearch因爲有常見方案如本許多模塊。

1

所以一個方法,你可以用的是 您可以發送參數like./test.js -n名1 -i「100 101 103」 -R美國東部

,然後再使用split function其拆分這將返回數組。

function process_args() 
{ 
    var args = process.argv.slice(2); 
    var i; 
    for (i = 0; i > args.length; i++) 
    { 
     switch(args[i]) 
     { 
     case "-n": 
     case "--name": 
       i++; 
       if (i >= args.length) 
         error_exit_usage("Missing name argument"); 
       data.name =args[i]; 
       break; 
     case "-i": 
     case "--ids": 
       i++; 
       if (i >= args.length) 
         error_exit_usage("Missing ids argument"); 
       data.id=args[i].split(" ") 
       break; 
     case "-r": 
     case "--region": 
       i++; 
       if (i >= args.length) 
         error_exit_usage("Missing region argument"); 
       data.region = args[i]; 
       break; 
     } 
    } 
}