本文へ移動

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, // this gets ignored
headers
: {
Authenticate
: 'error="invalid_token"',
}, }) throw new
HTTPException
(401, {
res
:
errorResponse
})

エラーの原因 ​

どちらの場合も、cause オプションを使って HTTPException に任意のデータを追加できます。

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

HTTPException の処理 ​

捕捉されなかった HTTPException は、app.onError で処理できます。HTTPException には getResponse メソッドがあり、エラーの status と、エラーの message またはスロー時に設定した独自のレスポンスから、新しい Response を作成して返します。

ts
import { 
HTTPException
} from 'hono/http-exception'
// ...
app
.
onError
((
err
,
c
) => {
if (
err
instanceof
HTTPException
) {
// Return the error response generated by HTTPException return
err
.
getResponse
()
} // For any other unexpected errors, log and return a generic 500 response
console
.
error
(
err
)
return
c
.
text
('Internal Server Error', 500)
})

注意

HTTPException.getResponse は Context を参照しません。Context に設定済みのヘッダーを含めるには、それらを新しい Response に適用する必要があります。

MIT ライセンスで公開されています。