Body Limit ミドルウェア
Body Limitミドルウェアは、リクエストボディのファイルサイズを制限できます。
このミドルウェアは、まずリクエストに存在する場合はContent-Length
ヘッダーの値を使用します。設定されていない場合は、ストリームでボディを読み取り、指定されたファイルサイズよりも大きい場合はエラーハンドラーを実行します。
インポート
ts
import { Hono } from 'hono'
import { bodyLimit } from 'hono/body-limit'
使い方
ts
const app = new Hono()
app.post(
'/upload',
bodyLimit({
maxSize: 50 * 1024, // 50kb
onError: (c) => {
return c.text('overflow :(', 413)
},
}),
async (c) => {
const body = await c.req.parseBody()
if (body['file'] instanceof File) {
console.log(`Got file sized: ${body['file'].size}`)
}
return c.text('pass :)')
}
)
オプション
必須 maxSize: number
制限したいファイルの最大ファイルサイズ。デフォルトは 100 * 1024
- 100kb
です。
任意 onError: OnError
指定されたファイルサイズを超過した場合に呼び出されるエラーハンドラー。
Bun での大きなリクエストの取り扱い
Body Limit ミドルウェアを明示的に使用してデフォルトよりも大きなリクエストボディを許可する場合、それに応じてBun.serve
構成を変更する必要がある場合があります。 執筆時点では、Bun.serve
のデフォルトのリクエストボディ制限は 128MiB です。Hono の Body Limit ミドルウェアをそれよりも大きい値に設定した場合でも、リクエストは失敗し、さらにミドルウェアで指定された onError
ハンドラーは呼び出されません。これは、Bun.serve()
がステータスコードを 413
に設定し、Hono にリクエストを渡す前に接続を終了するためです。
Hono と Bun で 128MiB よりも大きなリクエストを受け入れたい場合は、Bun の制限も設定する必要があります。
ts
export default {
port: process.env['PORT'] || 3000,
fetch: app.fetch,
maxRequestBodySize: 1024 * 1024 * 200, // your value here
}
または、セットアップによっては
ts
Bun.serve({
fetch(req, server) {
return app.fetch(req, { ip: server.requestIP(req) })
},
maxRequestBodySize: 1024 * 1024 * 200, // your value here
})