我正在编写一个接受命令行参数的NodeJS应用程序。要解析选项,我使用的是名为Commander的Node包。我想检查一个选项(-f / --fileName)。以下是不同输入产生的内容:
nodeapp --fileName sampleFile
会产生program.fileName="sampleFile"
nodeapp --fileName
会产生program.fileName=undefined
nodeapp" results
会产生program.fileName=undefined
我希望nodeapp --fileName
抛出“请指定文件名”错误,但我希望nodeapp
能正常工作。
是否有任何标准指定如何处理缺失的参数,或者我应遵循的最佳做法?
换句话说,如果一个选项需要一个参数,并且没有提供参数,是应该将它视为错误情况,还是应该忽略该选项?
答案 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()。