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
import { Hono } from 'hono'
import { bodyLimit } from 'hono/body-limit'Verwendung
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:
export default {
port: process.env['PORT'] || 3000,
fetch: app.fetch,
maxRequestBodySize: 1024 * 1024 * 200, // your value here
}Oder, abhängig von deiner Konfiguration:
Bun.serve({
fetch(req, server) {
return app.fetch(req, { ip: server.requestIP(req) })
},
maxRequestBodySize: 1024 * 1024 * 200, // your value here
})