首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js:我应该在生产代码中保留‘`assert()’吗?

Node.js:我应该在生产代码中保留‘`assert()’吗?
EN

Stack Overflow用户
提问于 2015-10-12 14:02:48
回答 2查看 5.4K关注 0票数 10

方法问题:

我正在使用node.js、mongodb和express.js实现一些服务的API接口。

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

代码语言:javascript
复制
method(function(err, data) {
  assert.equal(null, err);
});

问题是:我是否应该在生产时将assert语句保留在代码中(至少对于“低显着性”错误)?或者,这些只是为了测试代码,而且每次我都应该更好地处理所有错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-12 17:27:17

可能不是

参考文献:When should assertions stay in production code?

主要是在我的代码中,我将错误处理函数放在一个单独的文件中,并且在任何地方都使用相同的错误方法,它基本上依赖于逻辑。

就像ppl一般都忘了这个

代码语言:javascript
复制
process.on('uncaughtException', function (err) {
  console.log(err);
})

而且err==null没有伤害,它检查空的和未定义的

票数 -2
EN

Stack Overflow用户

发布于 2015-10-12 18:00:33

你绝对不应该将它们保存在生产环境中。

如果你在谷歌上搜索一点,就会发现有大量的替代方法来剔除它们。

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

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

这样,在您的代码中,您将不会看到像myAssert && myAssert(cond)这样容易出错的东西,相反,您将拥有一个更干净、更安全的myAssert(cond)语句。

下面是一个简单的例子:

代码语言:javascript
复制
// 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33083168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档