Aller au contenu

Middleware Mount ​

Le middleware Mount permet de monter dans votre application Hono une application construite avec un autre framework.

Importation ​

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

Utilisation ​

Enregistrez le middleware avec app.all() sur un chemin se terminant par /* :

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))

Par défaut, l’application montée reçoit une nouvelle Request dont l’URL ne contient plus le préfixe de chemin correspondant. Une requête vers /itty-router/hello arrive ainsi dans itty-router sous le chemin /hello.

L’application montée est appelée avec handler(request, c.env, c.executionCtx), soit les mêmes arguments qu’un gestionnaire fetch de Cloudflare Workers. Utilisez optionHandler pour passer des arguments différents.

Options ​

Vous pouvez passer une fonction ou un objet comme deuxième argument.

facultatif optionHandler: (c: Context) => unknown ​

Renvoie les arguments passés à l’application montée après la Request. Un tableau est décomposé en plusieurs arguments. Vous pouvez passer cette fonction directement comme deuxième argument :

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
],
}) )

facultatif replaceRequest: ((originalRequest: Request) => Request) | false ​

Contrôle quelle Request est passée à l’application montée :

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
)
}, }) )

Pour passer la Request d’origine sans modification, définissez cette option sur false, comme raccourci pour (req) => req :

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

Publié sous licence MIT.