方法问题:
我正在使用node.js、mongodb和express.js实现一些服务的API接口。
在许多(几乎所有)站点上,我看到这样的代码:
method(function(err, data) {
assert.equal(null, err);
});问题是:我是否应该在生产时将assert语句保留在代码中(至少对于“低显着性”错误)?或者,这些只是为了测试代码,而且每次我都应该更好地处理所有错误?
发布于 2015-10-12 17:27:17
可能不是
参考文献:When should assertions stay in production code?
主要是在我的代码中,我将错误处理函数放在一个单独的文件中,并且在任何地方都使用相同的错误方法,它基本上依赖于逻辑。
就像ppl一般都忘了这个
process.on('uncaughtException', function (err) {
console.log(err);
})而且err==null没有伤害,它检查空的和未定义的
发布于 2015-10-12 18:00:33
你绝对不应该将它们保存在生产环境中。
如果你在谷歌上搜索一点,就会发现有大量的替代方法来剔除它们。
就我个人而言,通过在一个单独的文件中实现两个包装器来使用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 onhttps://stackoverflow.com/questions/33083168
复制相似问题