跳转到内容
加入 「福强私学」,学习和了解更多关于技术、管理与人生的精彩内容。

如何在Middleware中对请求进行拦截并做后期处理?

想法很美好,现实很打脸。

middleware与handler相比,一个显著的特征是,它没有返回值(void)。

所以,middleware对整个处理链条的干预是通过forward给下一个handler或者抛出异常两种方式实现的。

比如JWT中间件在检查JWT的时候,发现JWT验证失败的情况下,会通过抛出HTTPException来中断执行流程。

所以,假如我想在验证失败后让用户的页面自动跳转到登录页面,就得通过覆写(override)honoApp的onError回调方法来实现:

app.onError((e, c) => {
if (e.status && e.status === 401) {
return c.redirect("/login.html", 302)
}
return c.text(e.message, 500)
})
// 或者
app.onError((e, c) => {
if (e.status && e.status === 401) {
return c.redirect("/login.html", 302)
}
throw e
})

当然,也可能是我一厢情愿了,总觉得应该像FilterChain那样,最外层的Middleware原则上应该可以捕捉里层的handler结果并进行后处理的。(当然,如果你不了解Java早期的Servlet框架设计,这句可以忽略)

加入「福强私学」

学习和了解更多关于技术、管理与人的精彩内容。

如果已经购买「福强私学」,可以直接点击这里开始访问

©️王福强个人版权所有