錯誤和錯誤中介軟體
如果我們想限制對我們應用的訪問,我們也可以為此編寫中介軟體! 此示例僅授予你在 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()
})