返回空数组或错误

时间:2014-07-20 16:55:55

标签: javascript node.js error-handling asynccallback

我有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){});

我还有一个关于如何处理数据库问题的问题。我现在正在做的是记录错误并稍后重试。我应该遵循更好的做法吗?

1 个答案:

答案 0 :(得分:0)

您应该返回一个空数组或null,以便您可以识别数据库的错误

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) {
            callback(err , []); // you should return an empty response here so that you can differentiate between error and no order

        }

        rows.forEach(function(row) {
            var order = {
                orderID: row.order_id
            }
        });
    }
}


orderDb.getWaitingOrders(function handleWaitingOrders(err, orders){

// do your error handling here 

});