錯誤和錯誤中介軟體

如果我們想限制對我們應用的訪問,我們也可以為此編寫中介軟體! 此示例僅授予你在 thrusdays 上的訪問許可權,但是現實世界的示例可以是例如使用者身份驗證。放置這個的好地方是在記錄中介軟體之後但在傳送任何內容之前。

app.use(function (req, res, next) {
    if (new Date().getDay() !== 4) {
        next('Access is only granted on thursdays')
    } else {
        next()
    }
})

正如你在此示例中所看到的,傳送錯誤就像為 next() 函式提供引數一樣簡單。

現在,如果我們在不同於星期四的任何一天訪問該網站,我們將遇到 500 錯誤和字串'Access is only granted on thursdays'

現在,這對我們的網站來說還不夠好。我們寧願在另一箇中介軟體中向使用者傳送 HTML 訊息:

app.use(function (err, req, res, next) {
    res.end(`<h1>Error</h1><p>${err}</p>`)
})

這有點像 catch 塊:錯誤中介軟體之前的中介軟體中的任何錯誤都將傳送給前者。錯誤中介軟體由其 4 個引數標識。

你還可以使用錯誤中介軟體通過再次呼叫下一個方法從錯誤中恢復:

app.use(function (err, req, res, next) {
    // Just joking, everybody is allowed access to the website!
    next()
})