Body Limit Middleware
Body Limit Middleware는 요청 본문의 파일 크기를 제한한다.
이 미들웨어는 먼저 요청에 Content-Length 헤더가 있는 경우 그 값을 사용한다. 헤더가 설정되지 않았다면 스트림에서 본문을 읽고, 지정된 파일 크기보다 큰 경우 에러 핸들러를 실행한다.
Import
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이다.
optional onError: OnError
지정된 파일 크기를 초과할 경우 호출될 에러 핸들러를 설정한다.
Bun에서 대용량 요청 처리하기
Body Limit Middleware를 명시적으로 사용해 기본값보다 큰 요청 본문을 허용하려면, Bun.serve 설정도 이에 맞게 변경해야 한다. 작성 시점 기준으로, Bun.serve의 기본 요청 본문 크기 제한은 128MiB이다. Hono의 Body Limit Middleware를 이보다 큰 값으로 설정하더라도 요청은 실패하며, 미들웨어에 지정된 onError 핸들러도 호출되지 않는다. 이는 Bun.serve()가 상태 코드를 413으로 설정하고 요청을 Hono로 전달하기 전에 연결을 종료하기 때문이다.
Hono와 Bun을 사용해 128MiB보다 큰 요청을 허용하려면, Bun의 제한도 함께 설정해야 한다:
ts
export default {
port: process.env['PORT'] || 3000,
fetch: app.fetch,
maxRequestBodySize: 1024 * 1024 * 200, // 여기에 원하는 값을 설정한다
}또는 설정에 따라 다음과 같이 할 수도 있다:
ts
Bun.serve({
fetch(req, server) {
return app.fetch(req, { ip: server.requestIP(req) })
},
maxRequestBodySize: 1024 * 1024 * 200, // 여기에 원하는 값을 설정한다
})