簡體   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