Zum Inhalt springen

Mount-Middleware ​

Mit der Mount-Middleware kannst du eine mit einem anderen Framework entwickelte Anwendung in deine Hono-Anwendung einbinden.

Import ​

ts
import { 
Hono
} from 'hono'
import {
mount
} from 'hono/mount'

Verwendung ​

Registriere die Middleware mit app.all() auf einem Pfad, der mit /* endet:

ts
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:

ts
// 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:

ts
// `/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:

ts
app
.
all
(
'/app/*',
mount
(
anotherApp
, {
replaceRequest
: false,
}) )

Veröffentlicht unter der MIT-Lizenz.