gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:48 27 4
gpt4 key购买 nike

方法论问题:

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

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

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

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

最佳答案

您绝对不应将它们保留在生产 环境中。

如果您稍微谷歌一下,就会发现有很多替代方法可以去除它们。

就个人而言,我会通过在单独的文件中实现两个包装器来使用 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

关于Node.js:我应该在生产代码中保留 `assert()` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33083168/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com