Aller au contenu

HonoRequest ​

HonoRequest est un objet accessible via c.req qui enveloppe un objet Request.

param() ​

Récupère les valeurs des paramètres de chemin.

ts
// Captured params
app
.
get
('/entry/:id', async (
c
) => {
const
id
=
c
.
req
.
param
('id')
// ... }) // Get all params at once
app
.
get
('/entry/:id/comment/:commentId', async (
c
) => {
const {
id
,
commentId
} =
c
.
req
.
param
()
})

query() ​

Récupère les paramètres de la chaîne de requête.

ts
// Query params
app
.
get
('/search', async (
c
) => {
const
query
=
c
.
req
.
query
('q')
}) // Get all params at once
app
.
get
('/search', async (
c
) => {
const {
q
,
limit
,
offset
} =
c
.
req
.
query
()
})

queries() ​

Récupère plusieurs valeurs pour un même paramètre de requête, par exemple /search?tags=A&tags=B.

ts
app
.
get
('/search', async (
c
) => {
// tags will be string[] const
tags
=
c
.
req
.
queries
('tags')
// ... })

Récupère la valeur d’un en-tête de requête.

ts
app
.
get
('/', (
c
) => {
const
userAgent
=
c
.
req
.
header
('User-Agent')
return
c
.
text
(`Your user agent is ${
userAgent
}`)
})

Attention

Lorsque vous appelez c.req.header() sans argument, toutes les clés de l’objet renvoyé sont en minuscules.

Pour récupérer un en-tête dont le nom contient des majuscules, utilisez c.req.header(“X-Foo”).

ts
// ❌ Will not work
const headerRecord = c.req.header()
const foo = headerRecord['X-Foo']

// ✅ Will work
const foo = c.req.header('X-Foo')

parseBody() ​

Analyse le corps de requête de type multipart/form-data ou application/x-www-form-urlencoded.

ts
app
.
post
('/entry', async (
c
) => {
const
body
= await
c
.
req
.
parseBody
()
// ... })

parseBody() prend en charge les comportements suivants.

Fichier unique

ts
const 
body
= await
c
.
req
.
parseBody
()
const
data
=
body
['foo']

body['foo'] est de type (string | File).

Si plusieurs fichiers sont envoyés, le dernier est utilisé.

Plusieurs fichiers ​

ts
const 
body
= await
c
.
req
.
parseBody
()
body
['foo[]']

body['foo[]'] est toujours de type (string | File)[].

Le suffixe [] est obligatoire.

Plusieurs fichiers ou champs portant le même nom ​

Si un champ autorise plusieurs fichiers (<input type="file" multiple />) ou si plusieurs cases à cocher portent le même nom (<input type="checkbox" name="favorites" value="Hono"/>), vous pouvez utiliser l’approche suivante.

ts
const 
body
= await
c
.
req
.
parseBody
({
all
: true })
body
['foo']

L’option all est désactivée par défaut.

  • Si body['foo'] contient plusieurs fichiers, il est traité comme (string | File)[].
  • Si body['foo'] contient un seul fichier, il est traité comme (string | File).

Notation par points ​

Si vous définissez l’option dot sur true, la valeur renvoyée est structurée selon la notation par points.

Imaginons que vous receviez les données suivantes :

ts
const 
data
= new
FormData
()
data
.
append
('obj.key1', 'value1')
data
.
append
('obj.key2', 'value2')

Vous pouvez obtenir une valeur structurée en définissant l’option dot sur true :

ts
const 
body
= await
c
.
req
.
parseBody
({
dot
: true })
// body is `{ obj: { key1: 'value1', key2: 'value2' } }`

json() ​

Analyse le corps de requête de type application/json.

ts
app
.
post
('/entry', async (
c
) => {
const
body
= await
c
.
req
.
json
()
// ... })

text() ​

Analyse le corps de requête de type text/plain.

ts
app
.
post
('/entry', async (
c
) => {
const
body
= await
c
.
req
.
text
()
// ... })

arrayBuffer() ​

Analyse le corps de requête comme un ArrayBuffer.

ts
app
.
post
('/entry', async (
c
) => {
const
body
= await
c
.
req
.
arrayBuffer
()
// ... })

blob() ​

Analyse le corps de requête comme un Blob.

ts
app
.
post
('/entry', async (
c
) => {
const
body
= await
c
.
req
.
blob
()
// ... })

formData() ​

Analyse le corps de requête comme un FormData.

ts
app
.
post
('/entry', async (
c
) => {
const
body
= await
c
.
req
.
formData
()
// ... })

valid() ​

Récupère les données validées.

ts
app.post('/posts', async (c) => {
  const { title, body } = c.req.valid('form')
  // ...
})

Les cibles suivantes sont disponibles.

  • form
  • json
  • query
  • header
  • cookie
  • param

Consultez la section sur la validation pour des exemples d’utilisation.

routePath ​

Attention

Obsolète depuis la version 4.8.0 : cette propriété est obsolète. Utilisez plutôt routePath() de l’utilitaire Route.

Dans le gestionnaire, vous pouvez récupérer le chemin enregistré comme suit :

ts
app
.
get
('/posts/:id', (
c
) => {
return
c
.
json
({
path
:
c
.
req
.
routePath
})
})

Si vous accédez à /posts/123, la valeur renvoyée est /posts/:id :

json
{ "path": "/posts/:id" }

matchedRoutes ​

Attention

Obsolète depuis la version 4.8.0 : cette propriété est obsolète. Utilisez plutôt matchedRoutes() de l’utilitaire Route.

Renvoie les routes correspondantes dans le gestionnaire, ce qui est utile pour le débogage.

ts
app
.
use
(async function
logger
(
c
,
next
) {
await
next
()
c
.
req
.
matchedRoutes
.
forEach
(({
handler
,
method
,
path
},
i
) => {
const
name
=
handler
.
name
||
(
handler
.
length
< 2 ? '[handler]' : '[middleware]')
console
.
log
(
method
,
' ',
path
,
' '.
repeat
(
Math
.
max
(10 -
path
.
length
, 0)),
name
,
i
===
c
.
req
.
routeIndex
? '<- respond from here' : ''
) }) })

path ​

Le chemin de la requête.

ts
app
.
get
('/about/me', async (
c
) => {
const
pathname
=
c
.
req
.
path
// `/about/me`
// ... })

url ​

L’URL de la requête sous forme de chaîne de caractères.

ts
app
.
get
('/about/me', async (
c
) => {
const
url
=
c
.
req
.
url
// `http://localhost:8787/about/me`
// ... })

method ​

Le nom de la méthode de la requête.

ts
app
.
get
('/about/me', async (
c
) => {
const
method
=
c
.
req
.
method
// `GET`
// ... })

raw ​

L’objet Request d’origine.

ts
// For Cloudflare Workers
app.post('/', async (c) => {
  const metadata = c.req.raw.cf?.hostMetadata?
  // ...
})

cloneRawRequest() ​

Clone l’objet Request d’origine d’une HonoRequest. Cela fonctionne même si le corps de la requête a déjà été lu par des validateurs ou des méthodes de HonoRequest.

ts
import { 
Hono
} from 'hono'
const
app
= new
Hono
()
import {
cloneRawRequest
} from 'hono/request'
import {
validator
} from 'hono/validator'
app
.
post
(
'/forward',
validator
('json', (
data
) =>
data
),
async (
c
) => {
// Clone after validation const
clonedReq
= await
cloneRawRequest
(
c
.
req
)
// Does not throw the error await
clonedReq
.
json
()
// ... } )

Publié sous licence MIT.