Le Middleware
Middleware vous permet d’intercepter les demandes et les réponses et d’injecter des comportements de manière dynamique chaque fois qu’une page ou un point de terminaison est sur le point d’être rendu.
Cela vous permet également de définir et de partager des informations spécifiques à une requête entre les points de terminaison et les pages en modifiant un objet locals
disponible dans tous les composants Astro et les points de terminaison de l’API.
Le middleware est disponible dans les projets SSG et SSR Astro.
Utilisation basique
Titre de la section Utilisation basique-
Créez
src/middleware.js|ts
(Alternativement, vous pouvez créersrc/middleware/index.js|ts
.) -
Dans ce fichier, exportez une fonction
onRequest()
(EN) à laquelle on peut passer un objetcontext
et une fonctionnext()
. Il ne doit pas s’agir d’une exportation par défaut.
-
Dans n’importe quel fichier
.astro
, accédez aux données de réponse en utilisantAstro.locals
.
Objet context
Titre de la section Objet contextL’objet context
(EN) inclut des informations à mettre à disposition d’autres middleware, routes API et routes .astro
pendant le processus de rendu.
C’est un argument optionnel passé à onRequest()
qui peut contenir l’objet locals
ainsi que toutes les propriétés additionnelles à partager pendant le rendu.Par exemple, l’objet context
peut inclure les cookies utilisés pour l’authentification.
Stocker des données dans context.locals
Titre de la section Stocker des données dans context.localscontext.locals
est un objet pouvant être manipulé dans le middleware.
Cet objet locals
est transmis à travers le processus de traitement des requêtes et est disponible en tant que propriété pour APIContext
(EN) et AstroGlobal
(EN). Cela permet de partager des données entre les middlewares, les routes API et les pages .astro
. Ceci est utile pour stocker des données spécifiques à une requête, telles que les données de l’utilisateur, à travers l’étape de rendu.
Les Integrations peuvent définir des propriétés et fournir des fonctionnalités à travers l’objet locals
. Si vous utilisez une intégration, vérifiez sa documentation pour vous assurer que vous ne surchargez aucune de ses propriétés et que vous ne faites pas de travail inutile.
Vous pouvez stocker n’importe quel type de données dans locals
: des chaînes, des nombres, et même des types de données complexes tels que des fonctions et des cartes.
Vous pouvez ensuite utiliser ces informations dans n’importe quel fichier .astro
avec Astro.locals
.
locals
est un objet qui vit et meurt au sein d’une seule route Astro ; lorsque la page de votre route est rendue, locals
n’existera plus et un nouvel objet sera créé. Les informations qui doivent persister à travers plusieurs requêtes de pages doivent être stockées ailleurs.
La valeur de locals
ne peut pas être modifiée à l’exécution. Cela risquerait d’effacer toutes les informations stockées par l’utilisateur. En mode dev
, Astro effectue des vérifications et lèvera une erreur si locals
est surchargé.
Exemple : Supprimer des informations sensibles
Titre de la section Exemple : Supprimer des informations sensiblesL’exemple ci-dessous utilise un middleware pour remplacer “PRIVATE INFO” par le mot “REDACTED” afin de vous permettre d’afficher le code HTML modifié sur votre page :
Type de middleware
Titre de la section Type de middlewareVous pouvez importer et utiliser la fonction utilitaire defineMiddleware()
pour bénéficier de la sécurité de type :
A la place, si vous utilisez JsDoc pour profiter de la sécurité des types, vous pouvez utiliser MiddlewareResponseHandler
:
Pour taper l’information dans Astro.locals
, ce qui vous donne l’autocomplétion dans les fichiers .astro
et le code middleware, déclarez un espace de noms global dans le fichier env.d.ts
:
Ensuite, dans le fichier du middleware, vous pouvez tirer parti de l’autocomplétion et de la sécurité des types.
Enchaînement middleware
Titre de la section Enchaînement middlewarePlusieurs intergiciels peuvent être reliés dans un ordre précis à l’aide de séquence()
(EN) :
L’ordre de la console sera alors le suivant :
Learn