Skip to content

Body Limit Middleware

Reference: RFC 7230 HTTP/1.1 Message Syntax and Routing

Body Limit middleware enforces a maximum request body size by checking the Content-Length header. When a request carries a body on a method that allows one, the middleware rejects oversized payloads before the body is ever read, which keeps large payloads from overwhelming the server.

Basic Usage

Apply body limit middleware using Deserve's built-in middleware:

typescript
import { 
Mware
,
Router
} from '@neabyte/deserve'
const
router
= new
Router
()
// Cap request bodies at 1MB
router
.
use
(
Mware
.
bodyLimit
({
limit
: 1024 * 1024
}) ) await
router
.
serve
(8000)

Route-Specific Limits

Apply different body limits to specific routes:

typescript
// 1MB limit for general routes
router
.
use
(
Mware
.
bodyLimit
({
limit
: 1024 * 1024
})) // 5MB limit for upload routes
router
.
use
('/uploads',
Mware
.
bodyLimit
({
limit
: 5 * 1024 * 1024
})) // 10MB limit for API routes
router
.
use
('/api',
Mware
.
bodyLimit
({
limit
: 10 * 1024 * 1024
}))

Configuration Options

limit

Maximum body size in bytes. Must be a positive finite number, otherwise the middleware throws Deno.errors.InvalidData when created:

typescript
// 1MB (1,048,576 bytes)
limit: 1024 * 1024

// 5MB (5,242,880 bytes)
limit: 5 * 1024 * 1024

// 10MB (10,485,760 bytes)
limit: 10 * 1024 * 1024

How It Works

The middleware checks the declared size from the Content-Length header before the body is read:

  1. GET or HEAD - the request passes through without a check, since these methods carry no body
  2. Content-Length present - when the value is missing a number, negative, or above limit, the request is rejected with 413 before the body is read
  3. No Content-Length - the request passes through, and the body is read normally by the handler

This caps how many bytes a body may declare. Checking the shape of those bytes is a separate step that a validation contract runs once the body is within the limit.

Error Handling

When the limit is exceeded, the middleware fails with status 413 and message Request body exceeds <limit> bytes limit. That failure routes through the central error handler like any other, so shape the response there or rely on the default behavior. A body:rejected observability event also fires with the limit and the declared size, covered in Event Reference.

Released under the MIT License.