繁体   English   中英

Functionall错误处理方法

[英]Functionall approach to error handling

我在这里找到了这个片段: http//www.nodewiz.biz/nodejs-error-handling-pattern/

它应该比node.js中的正常方式更好地处理错误。 但我不明白它是如何工作的以及为什么它比普通if(err) 更好


功能方法

使用Express.js feramework的示例,定义一个返回错误处理程序的函数:

function error(res,next) {
    return function( err, result ) {
        if( err ) {
            res.writeHead(500); res.end(); console.log(err);
        }
        else {
            next(result)
        }
    }
}

这允许你这样做;

app.get('/foo', function(req,res) {
    db.query('sql', error(res, function(result) {
        // use result
    }));
});

仅作为示例介绍此方法,请不要将此方法用于生产代码,除非您实际正确处理错误。

“它应该比node.js中的正常方式更好地处理错误。但我不明白它是如何工作的......”

它是如何工作的,它接收res对象和一个函数(由你提供),如果结果成功则调用它。

然后它返回一个作为回调传递给db.query()的函数。 这样回调实际上会收到errresult

如果发现err ,它会处理为您发送适当的500响应。 如果没有找到错误,它会调用您提供的函数并将result传递给它。 这样你知道如果你提供的功能运行,那是因为没有错误。


“......为什么它比普通的(错误的)更好?”

这不是更好。 这是不同的。 如果错误处理总是相同的,你可以在一个地方更新它,这是很好的,任何使用它的代码都将从更新中受益。

但是,简单的函数抽象也可以这样做。

function error(res, err) {
    if( err ) {
        res.writeHead(500); res.end(); console.log(err);
        return true
    }
    return false
}

这允许你这样做;

app.get('/foo', function(req,res) {
    db.query('sql', function(err, result) {
        if (error(res, err))
            return;

        // use the result
    }));
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM