在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的默认值是邪恶的。