缺少NodeJS应用程序的参数

时间:2014-06-19 14:25:46

标签: node.js posix

我正在编写一个接受命令行参数的NodeJS应用程序。要解析选项,我使用的是名为Commander的Node包。我想检查一个选项(-f / --fileName)。以下是不同输入产生的内容:

nodeapp --fileName sampleFile会产生program.fileName="sampleFile"

nodeapp --fileName会产生program.fileName=undefined

nodeapp" results会产生program.fileName=undefined

我希望nodeapp --fileName抛出“请指定文件名”错误,但我希望nodeapp能正常工作。

是否有任何标准指定如何处理缺失的参数,或者我应遵循的最佳做法?

换句话说,如果一个选项需要一个参数,并且没有提供参数,是应该将它视为错误情况,还是应该忽略该选项?

2 个答案:

答案 0 :(得分:1)

我偶尔使用指挥官。如果它是一个程序关键的输入,我通常只是检查它并退出程序,如果它不存在的话。

if(!argv.port) {
    console.log('Please provide a port number.');
    process.exit(0);
}

如果不重要,我通常会将其拉出自己的变量,如:

var host = (argv.host) ? argv.host : '127.0.0.1';

这样,如果我没有传递任何主机信息,它将默认为我的本地机器。

答案 1 :(得分:0)

NodeJS documentation建议您将exitCode设置为非零值,或者引发未捕获的错误。

它特别指出,在不满足条件的情况下,请勿使用process.exit

以下是process.exit的文档文本:

  

调用process.exit()将迫使进程尽快退出   即使仍有异步操作挂起   还没有完全完成,包括对I / O的操作   process.stdout和process.stderr。

     

在大多数情况下,实际上没有必要致电   process.exit()明确。如果出现以下情况,Node.js进程将自行退出   事件循环中没有其他待处理的工作。的   可以设置process.exitCode属性以告诉进程哪个退出   程序正常退出时使用的代码。

     

例如,以下示例说明了对   process.exit()方法可能导致打印到stdout的数据被   被截断和丢失:

// This is an example of what *not* to do: 
if (someConditionNotMet()) {   
  printUsageToStdout();   
  process.exit(1); 
} 
     

原因是   有问题的是因为在Node.js中写入process.stdout是   有时是异步的,可能会在   Node.js事件循环。但是,调用process.exit()会强制   可以在对stdout进行这些其他写入之前退出进程   执行。

     

该代码不应直接调用process.exit(),而应设置   process.exitCode并通过避免以下行为使进程自然退出   为事件循环安排其他工作:

// How to properly set the exit code while letting the process exit gracefully. 
if (someConditionNotMet()) {
  printUsageToStdout();  
  process.exitCode = 1; 
} 
     

如果有必要终止Node.js   由于错误情况而导致的处理过程,引发未捕获的错误,并且   允许进程相应地终止比调用安全   process.exit()。