Node.js:我应该在生产代码中保存assert()吗?

一个方法论问题:

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

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

method(function(err, data) { assert.equal(null, err); }); 

问题是:在生产时我是否应该在自己的代码中声明自己的声明(至less对于“低含义”错误)? 或者,这些只是用于testing代码,而且我应该每次更好地处理所有错误?

可能没有

ref: 什么时候应该断言生产代码?

大部分在我的代码中,我把error handling函数放在一个单独的文件中,并且在任何地方都使用相同的错误方法,但它大多依赖于逻辑

像ppl一般都忘记了这一点

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

和err == null不会伤害,它会检查null和undefined

你绝对不应该把它们留在生产环境中。

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

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

因此,在运行时,可以依靠先前正确设置的一些全局variables(如process.env.mode来插入正确的variables。 在你的文件中,你只需要导入上面提到的模块,并使用它来代替直接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