在Javascriptexpression式中使用throw

这是我想要做的:

var setting = process.env.SETTING || throw new Error("please set the SETTING environmental variable"); ^^^^^ 

但解释器抱怨“语法错误:意外的令牌抛出”。

有什么办法在同一行中抛出一个exception,我们比较一个值是否为false?

throw是一个语句,而不是一个expression式,所以你不能把它用作另一个expression式的一部分。 你必须拆分它:

 var setting = process.env.SETTING; if (!setting) throw new Error("please set the SETTING environmental variable"); 

你可以利用javascript的function性质:

 var setting = process.env.SETTING || function(){ throw "please set the SETTING environmental variable"; }(); // es201x var setting = process.env.SETTING || (() => throw `SETTING environmental variable not set`)(); 

或更通用的创build一个函数来抛出错误,并使用它:

 function throwErr(mssg){ throw new Error(mssg); } var setting = process.env.SETTING || throwErr("please set the SETTING environmental variable"); 

throw没有返回值。 所以你不能这样使用它。 但是你可以把这个throw包装在一个函数中。 它会工作。 但是要find例外的来源则更为困难。

我看到你使用nodejs。

我认为validationinput参数的最好方法是断言。 NodeJS内置简单的断言模块: http : //nodejs.org/api/assert.html

并使用它,例如,像这样:

 var assert = require('assert'); // ... function myFunction (param) { assert(param, 'please pass param'); // ... } 

对于testing环境,你可以这样做:

 require('assert')(process.env.setting, 'please set the SETTING environmental variable'); 

要么:

 ;(function (a) { a(process.env.setting, 'please set the SETTING environmental variable'); a(process.env.port, 'please set the PORT environmental variable'); }(require('assert'))); 
 const getenv = require('getenv'); const setting = getenv('SETTING'); 

如果设置不存在,你会得到:

 … getenv.js:14 throw new Error('GetEnv.Nonexistent: ' + varName + ' does not exist ' + ^ Error: GetEnv.Nonexistent: SETTING does not exist and no fallback value provided. 

顺便说一句,我的经验告诉我,环境variables的默认值是邪恶的。