Mount-Middleware
Mit der Mount-Middleware kannst du eine mit einem anderen Framework entwickelte Anwendung in deine Hono-Anwendung einbinden.
Import
import { Hono } from 'hono'
import { mount } from 'hono/mount'Verwendung
Registriere die Middleware mit app.all() auf einem Pfad, der mit /* endet:
import { Router as IttyRouter } from 'itty-router'
// Create itty-router application
const ittyRouter = IttyRouter()
// Handle `GET /itty-router/hello`
ittyRouter.get('/hello', () => new Response('Hello from itty-router'))
const app = new Hono()
app.all('/itty-router/*', mount(ittyRouter.handle))Standardmäßig erhält die eingebundene Anwendung eine neue Request, aus deren URL das übereinstimmende Pfadpräfix entfernt wurde. Eine Anfrage an /itty-router/hello erreicht itty-router als /hello.
Die eingebundene Anwendung wird als handler(request, c.env, c.executionCtx) aufgerufen, mit denselben Argumenten wie ein fetch-Handler von Cloudflare Workers. Verwende optionHandler, um andere Argumente zu übergeben.
Optionen
Als zweites Argument kannst du eine Funktion oder ein Objekt übergeben.
optional optionHandler: (c: Context) => unknown
Gibt die Argumente zurück, die nach der Request an die eingebundene Anwendung übergeben werden. Ein Array wird in mehrere Argumente aufgeteilt. Du kannst die Funktion direkt als zweites Argument übergeben:
// Call `anotherApp(request, c.env)`
app.all(
'/app/*',
mount(anotherApp, (c) => c.env)
)
// Call `anotherApp(request, c.env, c.executionCtx)`
app.all(
'/app/*',
mount(anotherApp, {
optionHandler: (c) => [c.env, c.executionCtx],
})
)optional replaceRequest: ((originalRequest: Request) => Request) | false
Legt fest, welche Request an die eingebundene Anwendung übergeben wird:
// `/legacy/users` reaches the mounted application as `/api/users`
app.all(
'/legacy/*',
mount(anotherApp, {
replaceRequest: (req) => {
const url = new URL(req.url)
url.pathname = url.pathname.replace(/^\/legacy/, '/api')
return new Request(url, req)
},
})
)Um die ursprüngliche Request unverändert weiterzugeben, setze die Option auf false als Kurzform für (req) => req:
app.all(
'/app/*',
mount(anotherApp, {
replaceRequest: false,
})
)