Node.js:我应该在生产代码中保留`assert()`

时间:2015-10-12 14:02:48

标签: node.js assert assertions

方法论问题:

我正在使用node.js,mongodb和express.js为某些服务实现API接口。

在很多(几乎所有)网站上,我看到这样的代码:

Attachment

问题是:我是否应该在生产时将method(function(err, data) { assert.equal(null, err); }); 语句保留在我的代码中(至少对于“低重要性”错误)?或者,这些仅用于测试代码,我每次都应该更好地处理所有错误吗?

2 个答案:

答案 0 :(得分:4)

您最终不应将它们保留在生产环境中。

如果你有点谷歌,有很多替代方法可以去除它们。

就个人而言,我通过在单独的文件中实现两个包装器来使用null object模式:前者将其方法直接映射到模块assert导出的方法,后者提供空功能,仅此而已。

因此,在运行时,您可以依靠先前正确设置的某个全局变量(例如process.env.mode)来插入正确的变量。在您的文件中,您只需要导入上述模块并使用它而不是直接使用assert

这样,在您的代码周围,您永远不会看到像myAssert && myAssert(cond)这样容易出错的内容,相反,您将拥有更清晰,更安全的myAssert(cond)声明。

它是一个简短的例子:

// myassert.js
var assert = require('assert');
if('production' === process.env.mode) {
    var nil = function() { };
    module.exports = {
        equal = nil;
        notEqual = nil;
        // all the other functions
    };
} else {
    // a wrapper like that one helps in not polluting the exported object
    module.exports = {
        equal = function(actual, expected, message) {
            assert.equal(actual, expected, message);
        },
        notEqual = function(actual, expected, message) {
            assert.notEqual(actual, expected, message);
        },
        // all the other functions
    }
}


// another_file.js
var assert = require('path_to_myassert/myassert');
// ... your code
assert(true, false);
// ... go on

答案 1 :(得分:1)

可能没有

参考:When should assertions stay in production code?

主要在我的代码中我将错误处理函数放在一个单独的文件中,并且在任何地方使用相同的错误方法,它主要取决于逻辑

像ppl一样,一般都会忘记这个

process.on('uncaughtException', function (err) {
  console.log(err);
})

和err == null不会受到伤害,它会同时检查null和undefined