Middleware Mount
Le middleware Mount permet de monter dans votre application Hono une application construite avec un autre framework.
Importation
import { Hono } from 'hono'
import { mount } from 'hono/mount'Utilisation
Enregistrez le middleware avec app.all() sur un chemin se terminant par /* :
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 :
// 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 :
// `/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 :
app.all(
'/app/*',
mount(anotherApp, {
replaceRequest: false,
})
)