Zum Inhalt springen

Body-Limit-Middleware ​

Die Body-Limit-Middleware kann die Dateigröße des Anfrage-Bodys begrenzen.

Wenn die Anfrage einen Header Content-Length enthält, verwendet diese Middleware zunächst dessen Wert. Ist er nicht gesetzt, liest sie den Body aus dem Stream und führt bei Überschreiten der angegebenen Dateigröße einen Fehler-Handler aus.

Import ​

ts
import { Hono } from 'hono'
import { bodyLimit } from 'hono/body-limit'

Verwendung ​

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 :)')
  }
)

Optionen ​

required maxSize: number ​

Die maximale Dateigröße, auf die du begrenzen möchtest. Der Standardwert ist 100 * 1024, also 100kb.

optional onError: OnError ​

Der Fehler-Handler, der bei Überschreiten der angegebenen Dateigröße aufgerufen wird.

Verwendung mit Bun für große Anfragen ​

Wenn du die Body-Limit-Middleware ausdrücklich verwendest, um einen größeren Anfrage-Body als den Standard zuzulassen, musst du möglicherweise auch deine Konfiguration von Bun.serve anpassen. Zum Zeitpunkt der Erstellung dieser Dokumentation beträgt die standardmäßige Begrenzung von Bun.serve 128 MiB. Wenn du in Honos Body-Limit-Middleware einen größeren Wert festlegst, schlagen deine Anfragen trotzdem fehl. Außerdem wird der in der Middleware angegebene Handler onError nicht aufgerufen. Das liegt daran, dass Bun.serve() den Statuscode auf 413 setzt und die Verbindung beendet, bevor die Anfrage an Hono übergeben wird.

Wenn du mit Hono und Bun Anfragen mit mehr als 128 MiB akzeptieren möchtest, musst du auch die Begrenzung für Bun setzen:

ts
export default {
  port: process.env['PORT'] || 3000,
  fetch: app.fetch,
  maxRequestBodySize: 1024 * 1024 * 200, // your value here
}

Oder, abhängig von deiner Konfiguration:

ts
Bun.serve({
  fetch(req, server) {
    return app.fetch(req, { ip: server.requestIP(req) })
  },
  maxRequestBodySize: 1024 * 1024 * 200, // your value here
})

Veröffentlicht unter der MIT-Lizenz.