Skip to content

HTTPException

致命的なエラーが発生した際に、Hono (や多くのエコシステムミドルウェア) は、HTTPException をスローするかもしれません。 これは、エラーレスポンスを返す を簡素化したカスタム Hono Error です。

HTTPException をスローする

ステータスコードとエラーメッセージあるいはカスタムレスポンスのどちらかを指定することで、独自の HTTPException をスローすることができます。

カスタムメッセージ

基本的な text レスポンスを返すために、エラー message をセットするだけです。

ts
import { 
HTTPException
} from 'hono/http-exception'
throw new
HTTPException
(401, {
message
: 'Unauthorized' })

カスタムレスポンス

他のレスポンス型のために、あるいはレスポンスヘッダをセットするために、 res オプションを使用します。コンストラクタに渡されたステータスは、レスポンスを生成するために使用されたものであることに注意してください

ts
import { 
HTTPException
} from 'hono/http-exception'
const
errorResponse
= new
Response
('Unauthorized', {
status
: 401, // これは無視されます
headers
: {
Authenticate
: 'error="invalid_token"',
}, }) throw new
HTTPException
(401, {
res
:
errorResponse
})

Cause

いずれの場合も、 HTTPException に任意のデータを追加するために cause オプションを使用することができます。

ts
app
.
post
('/login', async (
c
) => {
try { await
authorize
(
c
)
} catch (
cause
) {
throw new
HTTPException
(401, {
message
,
cause
})
} return
c
.
redirect
('/')
})

HTTPException を処理する

app.onError を使用して、捕捉されなかった HTTPException を処理することができます。 HTTPException は getResponse メソッドを持っており、エラー status をもとに生成された新しい Response を返します。 エラーがスローされた際に、エラー message あるいはカスタムレスポンスのどちらかがセットされます。

ts
import { 
HTTPException
} from 'hono/http-exception'
// ...
app
.
onError
((
err
,
c
) => {
if (
err
instanceof
HTTPException
) {
// HTTPException で生成されたエラーレスポンスを返す return
err
.
getResponse
()
} // 他の予期しないエラーが起きたら、ログを出力してから一般的な 500 レスポンスを返します
console
.
error
(
err
)
return
c
.
text
('Internal Server Error', 500)
})

WARNING

HTTPException.getResponse は、 Context を認識しません Context で既にセットされたヘッダを含めるには、新しい Response にヘッダを適用しなければなりません。

このドキュメントは非公式の日本語翻訳版です。
Released under the MIT License.