Skip to content

异常处理

当发生致命错误(如身份验证失败)时,必须抛出 HTTPException。

抛出 HTTPException

以下示例展示了如何在中间件中抛出 HTTPException。

ts
import { 
HTTPException
} from 'hono/http-exception'
// ...
app
.
post
('/auth', async (
c
,
next
) => {
// 身份验证 if (
authorized
=== false) {
throw new
HTTPException
(401, {
message
: '自定义错误信息' })
} await
next
()
})

你可以指定要返回给用户的响应内容。

ts
import { 
HTTPException
} from 'hono/http-exception'
const
errorResponse
= new
Response
('未经授权', {
status
: 401,
headers
: {
Authenticate
: 'error="invalid_token"',
}, }) throw new
HTTPException
(401, {
res
:
errorResponse
})

处理 HTTPException

你可以通过 app.onError 来处理抛出的 HTTPException。

ts
import { 
HTTPException
} from 'hono/http-exception'
// ...
app
.
onError
((
err
,
c
) => {
if (
err
instanceof
HTTPException
) {
// 获取自定义响应 return
err
.
getResponse
()
} // ... })

cause 属性

可以使用 cause 选项来添加 cause 数据。

ts
app
.
post
('/auth', async (
c
,
next
) => {
try {
authorize
(
c
)
} catch (
e
) {
throw new
HTTPException
(401, {
message
,
cause
:
e
})
} await
next
()
})

Released under the MIT License.