错误和错误中间件

如果我们想限制对我们应用的访问,我们也可以为此编写中间件! 此示例仅授予你在 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()
})