【发布时间】:2014-09-11 05:33:26
【问题描述】:
我让 nodejs 访问数据库以检索一行订单。 以下函数定义在一个名为 orderDb.js 的文件中
module.exports.getWaitingOrders = function getWaitingOrders(callback) {
pool.query("SELECT * FROM live_order_table WHERE isWaiting = 1;", function(err, rows, fields) {
if (err) {
return new Error('Db error: ' + err);
}
if (rows.length <= 0) {
return new Error("No results"); //Is this recommended?
return [];// or this?
}
rows.forEach(function(row) {
var order = {
orderID: row.order_id
}
});
}
}
当数据库没有返回任何内容时,我应该返回错误还是空数组/对象?
我这样调用方法:
orderDb.getWaitingOrders(function handleWaitingOrders(err, orders){});
我还有一个关于如何处理数据库问题的问题。我现在正在做的是记录错误并稍后重试。我应该遵循更好的做法吗?
【问题讨论】:
-
这取决于您想要返回什么,以及您期望返回什么。您可以抛出错误、返回 false、null、未定义、空数组、独角兽或阳光,这并不重要,只要它是您在事物的另一端所期望的。
-
我同意@adeneo。但我的观点是,如果这是问题的根源,你应该只抛出错误。错误和空列表在语义上是不同的,应该在各自的地方使用。如果您搜索某些内容并找到 0 个项目,我觉得那应该是一个空列表,因为您专门描述了找到 0 个项目。但是,如果有数据库问题、IO 问题、任何方式的异常,你都应该传播它。只是我的意见
-
老实说,这取决于“另一端”的含义。前端?如果您只是获取订单并列出它们,那么这取决于您想要在视觉上做什么。也许您会显示一条消息说“没有等待订单”,否则列出订单。同时,如果你得到一个错误,你会显示它(或者在不同的地方,比如一个模态)。我想将错误与空数据混合在一起对我来说感觉很奇怪,因为它们是两个完全不同的东西,并且意味着不同的东西。显然,您可以将它们混合使用,但它可能会更难维护
-
@Ian +1 这取决于你如何处理另一端的事情
-
@VivekBajpai 没错,我只是想我会对此发表意见:)
标签: javascript node.js error-handling asynccallback