var assert = require('assert');
// ...
function myFunction (param) {
assert(param, 'please pass param');
// ...
}
对于测试环境,您可以按如下方式执行:
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')));
… getenv.js:14
throw new Error('GetEnv.Nonexistent: ' + varName + ' does not exist ' +
^ Error: GetEnv.Nonexistent: SETTING does not exist and no fallback value provided.
8条答案
按热度按时间k5hmc34c1#
你可以利用javascript的功能特性:
或更一般的创建一个函数抛出错误并使用:
我使用的一个片段:
dgsult0t2#
throw
是语句,而不是表达式,因此不能将其用作另一个表达式的一部分。必须将其拆分:snvhrwxg3#
有一个草案建议在JavaScript/ECMAScript中引入throw表达式(类似于C#7的throw表达式):
∮ ∮ ∮ ∮
izkcnapc4#
用大括号把它包起来
或者用一个函数 Package 它(实际上是用大括号 Package 它)
i7uaboj45#
throw
没有返回值,所以你不能这样使用它,但是你可以把抛出的代码封装在一个函数中,这样它就可以工作了,但是要找到异常的来源就比较困难了。agxfikkp6#
我看到你在使用nodej。
我认为验证输入参数最好的方法是Assert,NodeJS内置了简单的Assert模块:http://nodejs.org/api/assert.html
并使用它,例如,像这样:
对于测试环境,您可以按如下方式执行:
或者:
8e2ybdfx7#
这不是对这个问题的直接回答,但如果你使用TypeScript,我发现runtypes是手动验证和抛出的一个很好的替代方法。虽然OP中的方法在输入类型为
output | null | undefined
或类似的时候有效,但runtypes在输入类型为any
的时候也有效,比如在防御性地解码一个已知结构的JSON时。您可以这样使用它:
如果
process.env.SETTING
是undefined
,它将抛出。添加.withConstraint()
以添加其他条件。该库实际上相当强大,不仅可以验证简单类型,还可以以类型安全的方式验证记录(接口)、联合体等。一个缺点是您无法自定义错误消息(“Failed constraint check”),这在许多快速和肮脏的情况下是可以的,因为发生错误的行将告诉您问题是什么。
io-ts是另一个类似的库,尽管它似乎有一个更复杂的方法,目前正在变化。
lzfw57am8#
如果SETTING不存在,您将获得:
顺便说一句,我的经验告诉我,默认值的环境变量是邪恶的。