Contexte de rendu d'Astro
Lors du rendu dâune page, Astro fournit une API dâexĂ©cution spĂ©cifique au rendu actuel. Cela inclut des informations utiles telles que lâURL de la page actuelle ainsi que des API permettant dâeffectuer des actions telles que la redirection vers une autre page.
Dans les composants .astro, ce contexte est disponible Ă partir de lâobjet global Astro. Les fonctions de point de terminaison sont Ă©galement appelĂ©es avec ce mĂȘme objet de contexte comme premier argument, dont les propriĂ©tĂ©s reflĂštent les propriĂ©tĂ©s globales dâAstro.
Certaines propriétés ne sont disponibles que pour les routes rendues à la demande ou peuvent avoir des fonctionnalités limitées sur les pages pré-rendues.
Lâobjet global Astro est disponible pour tous les fichiers .astro. Utilisez lâobjet context dans les fonctions de point de terminaison pour servir les points de terminaison de serveur statique ou en direct et dans le middleware pour injecter un comportement lorsquâune page ou un point de terminaison est sur le point dâĂȘtre rendu.
Lâobjet de contexte
Section intitulĂ©e « Lâobjet de contexte »Les propriĂ©tĂ©s suivantes sont disponibles dans lâobjet global Astro (par exemple Astro.props, Astro.redirect()) et sont Ă©galement disponibles dans lâobjet de contexte (par exemple context.props, context.redirect()) passĂ© aux fonctions de point de terminaison et au middleware.
props est un objet contenant toutes les valeurs qui ont Ă©tĂ© transmises en tant quâattributs de composant.
---const { title, date } = Astro.props;---<div> <h1>{title}</h1> <p>{date}</p></div>---import Heading from '../components/Heading.astro';---<Heading title="Mon tout premier article" date="09 AoĂ»t 2022" />Lâobjet props contient Ă©galement toutes les props transmises depuis getStaticPaths() lors du rendu des routes statiques.
---export function getStaticPaths() { return [ { params: { id: '1' }, props: { author: 'Blu' } }, { params: { id: '2' }, props: { author: 'Erika' } }, { params: { id: '3' }, props: { author: 'Matthew' } } ];}
const { id } = Astro.params;const { author } = Astro.props;---import type { APIContext } from 'astro';
export function getStaticPaths() { return [ { params: { id: '1' }, props: { author: 'Blu' } }, { params: { id: '2' }, props: { author: 'Erika' } }, { params: { id: '3' }, props: { author: 'Matthew' } } ];}
export function GET({ props }: APIContext) { return new Response( JSON.stringify({ author: props.author }), );}Voir aussi : Transmission de données avec props
params est un objet contenant les valeurs des segments de route dynamiques correspondant Ă une requĂȘte. Ses propriĂ©tĂ©s doivent correspondre aux paramĂštres du chemin dâaccĂšs Ă la page ou au fichier de point de terminaison.
Dans les versions statiques, il sâagira des params renvoyĂ©s par getStaticPaths() utilisĂ©s pour le prĂ©-rendu des routes dynamiques.
---export function getStaticPaths() { return [ { params: { id: '1' } }, { params: { id: '2' } }, { params: { id: '3' } } ];}const { id } = Astro.params;---<h1>{id}</h1>import type { APIContext } from 'astro';
export function getStaticPaths() { return [ { params: { id: '1' } }, { params: { id: '2' } }, { params: { id: '3' } } ];}
export function GET({ params }: APIContext) { return new Response( JSON.stringify({ id: params.id }), );}Lorsque les routes sont rendues Ă la demande, params peut ĂȘtre nâimporte quelle valeur correspondant aux segments de chemin dans le modĂšle de route dynamique.
---import { getPost } from '../api';
const post = await getPost(Astro.params.id);
// Aucun article trouvé avec cet identifiantif (!post) { return Astro.redirect("/404")}---<html> <h1>{post.name}</h1></html>Voir aussi : params
Type : URL
astro@1.0.0
url est un objet URL construit Ă partir de la valeur actuelle de request.url. Il est utile pour interagir avec les propriĂ©tĂ©s individuelles de lâURL de la requĂȘte, comme le chemin dâaccĂšs et lâorigine.
Astro.url équivaut à faire new URL(Astro.request.url).
url sera une URL localhost en mode dev. Lors de la crĂ©ation dâun site, les routes prĂ©-rendues recevront une URL basĂ©e sur les options site et base. Si site nâest pas configurĂ©, les pages prĂ©-rendues recevront Ă©galement une URL localhost pendant la compilation.
<h1>L'URL actuelle est : {Astro.url}</h1><h1>Le chemin d'accÚs actuel de l'URL est : {Astro.url.pathname}</h1><h1>L'origine de l'URL actuelle est : {Astro.url.origin}</h1>Vous pouvez également utiliser url pour créer de nouvelles URL en la passant comme argument à new URL().
---// Exemple : créer une URL canonique à l'aide de votre domaine de productionconst canonicalURL = new URL(Astro.url.pathname, Astro.site);// Exemple : créez une URL pour les balises méta SEO en utilisant votre domaine actuelconst socialImageURL = new URL('/images/preview.png', Astro.url);---<link rel="canonical" href={canonicalURL} /><meta property="og:image" content={socialImageURL} />Type : URL | undefined
site renvoie une URL créée Ă partir du site dĂ©fini dans votre configuration Astro. Il renvoie undefined si vous nâavez pas dĂ©fini de valeur pour site dans votre configuration Astro.
<link rel="alternate" type="application/rss+xml" title="Le titre de votre site" href={new URL("rss.xml", Astro.site)}/>clientAddress
Section intitulée « clientAddress »Type : string
astro@1.0.0
clientAddress spĂ©cifie lâadresse IP de la requĂȘte. Cette propriĂ©tĂ© est uniquement disponible pour les routes rendues Ă la demande et ne peut pas ĂȘtre utilisĂ©e sur les pages prĂ©-rendues.
---export const prerender = false; // Pas nécessaire en mode `server`---
<div>Votre adresse IP est : <span class="address">{Astro.clientAddress}</span></div>export const prerender = false; // Pas nécessaire en mode `server`import type { APIContext } from 'astro';
export function GET({ clientAddress }: APIContext) { return new Response(`Votre adresse IP est : ${clientAddress}`);}isPrerendered
Section intitulée « isPrerendered »Type : boolean
astro@5.0.0
Un booléen indiquant si la page actuelle est pré-rendue ou non.
Vous pouvez utiliser cette propriĂ©tĂ© pour exĂ©cuter une logique conditionnelle dans un middleware, par exemple, pour Ă©viter dâaccĂ©der aux en-tĂȘtes dans les pages prĂ©-rendues.
generator
Section intitulée « generator »Type : string
astro@1.0.0
generator fournit la version actuelle dâAstro que votre projet exĂ©cute. Câest un moyen pratique dâajouter une balise <meta name="generator"> avec votre version actuelle dâAstro. Il suit le format "Astro v5.x.x".
<html> <head> <meta name="generator" content={Astro.generator} /> </head> <body> <footer> <p>Construit avec <a href="https://astro.build">{Astro.generator}</a></p> </footer> </body></html>import type { APIContext } from 'astro';
export function GET({ generator, site }: APIContext) { const body = JSON.stringify({ generator, site }); return new Response(body);}Type : Request
Astro.request est un objet Request standard. Il peut ĂȘtre utilisĂ© pour obtenir les propriĂ©tĂ©s url, headers, method, et mĂȘme le corps de la requĂȘte.
<p>RĂ©ception d'une requĂȘte {Astro.request.method} Ă "{Astro.request.url}".</p><p>En-tĂȘtes de requĂȘte reçus :</p><p><code>{JSON.stringify(Object.fromEntries(Astro.request.headers))}</code></p>import type { APIContext } from 'astro';
export function GET({ request }: APIContext) { return new Response(`Hello ${request.url}`);}Sur les pages prĂ©-rendues, request.url ne contient pas de paramĂštres de recherche, comme ?type=new, car il nâest pas possible de les dĂ©terminer Ă lâavance lors des gĂ©nĂ©rations statiques. Cependant, request.url contient des paramĂštres de recherche pour les pages rendues Ă la demande car ils peuvent ĂȘtre dĂ©terminĂ©s Ă partir dâune requĂȘte serveur.
Type : ResponseInit & { readonly headers: Headers }
response est un objet ResponseInit standard. Il a la structure suivante.
status : Le code de statut numĂ©rique de la rĂ©ponse, par exemple200.statusText : Le message de statut associĂ© au code de statut, par exemple'OK'.headers : Une instanceHeadersque vous pouvez utiliser pour dĂ©finir les en-tĂȘtes HTTP de la rĂ©ponse.
Astro.response est utilisĂ© pour dĂ©finir le status, le statusText et les headers de la rĂ©ponse dâune page.
---if(condition) { Astro.response.status = 404; Astro.response.statusText = 'Non trouvĂ©';}---Ou de dĂ©finir un en-tĂȘte :
---Astro.response.headers.set('Set-Cookie', 'a=b; Path=/;');---redirect()
Section intitulée « redirect() »Type : (path: string, status?: number) => Response
astro@1.5.0
redirect() renvoie un objet Response qui vous permet de rediriger vers une autre page et Ă©ventuellement de fournir un code dâĂ©tat de rĂ©ponse HTTP comme deuxiĂšme paramĂštre.
Une page (et non un composant enfant) doit renvoyer le résultat de Astro.redirect() pour que la redirection se produise.
Pour les routes gĂ©nĂ©rĂ©es de maniĂšre statique, cela produira une redirection client Ă lâaide dâune balise <meta http-equiv="refresh"> et ne prend pas en charge les codes dâĂ©tat.
Pour les routes rendues Ă la demande, la dĂ©finition dâun code dâĂ©tat personnalisĂ© est prise en charge lors de la redirection. Sâil nâest pas spĂ©cifiĂ©, les redirections seront servies avec un code dâĂ©tat 302.
Lâexemple suivant redirige un utilisateur vers une page de connexion :
---import { isLoggedIn } from '../utils';
const cookie = Astro.request.headers.get('cookie');
// Si l'utilisateur n'est pas connecté, redirigez-le vers la page de connexionif (!isLoggedIn(cookie)) { return Astro.redirect('/login');}---
<p>Informations de l'utilisateur</p>import type { APIContext } from 'astro';
export function GET({ redirect, request }: APIContext) { const cookie = request.headers.get('cookie'); if (!isLoggedIn(cookie)) { return redirect('/login', 302); } else { // renvoyer les informations de l'utilisateur }}rewrite()
Section intitulée « rewrite() »Type : (rewritePayload: string | URL | Request) => Promise<Response>
astro@4.13.0
rewrite() vous permet de diffuser du contenu Ă partir dâune URL ou dâun chemin diffĂ©rent sans rediriger le navigateur vers une nouvelle page.
La mĂ©thode accepte soit une chaĂźne de caractĂšres, une URL ou un objet Request pour lâemplacement du chemin.
Utilisez une chaßne de caractÚres pour fournir un chemin explicite :
---return Astro.rewrite("/login")---import type { APIContext } from 'astro';
export function GET({ rewrite }: APIContext) { return rewrite('/login');}Utilisez un type URL lorsque vous devez construire le chemin de lâURL pour la réécriture. Lâexemple suivant affiche le chemin parent dâune page en crĂ©ant une nouvelle URL Ă partir du chemin relatif "../" :
---return Astro.rewrite(new URL("../", Astro.url))---import type { APIContext } from 'astro';
export function GET({ rewrite }: APIContext) { return rewrite(new URL("../", Astro.url));}Utilisez un type Request pour un contrĂŽle complet de la requĂȘte (Request) envoyĂ©e au serveur pour le nouveau chemin. Lâexemple suivant envoie une requĂȘte pour afficher la page parent tout en fournissant des en-tĂȘtes :
---return Astro.rewrite(new Request(new URL("../", Astro.url), { headers: { "x-custom-header": JSON.stringify(Astro.locals.someValue) }}))---import type { APIContext } from 'astro';
export function GET({ rewrite }: APIContext) { return rewrite(new Request(new URL("../", Astro.url), { headers: { "x-custom-header": JSON.stringify(Astro.locals.someValue) } }));}originPathname
Section intitulée « originPathname »Type : string
astro@5.0.0
originPathname dĂ©finit le chemin dâaccĂšs dâorigine de la requĂȘte, avant que les réécritures ne soient appliquĂ©es.
<p>Le chemin d'origine est {Astro.originPathname}</p><p>Le chemin réécrit est {Astro.url.pathname}</p>import { defineMiddleware } from 'astro:middleware';
export const onRequest = defineMiddleware(async (context, next) => { // Enregistre le chemin d'accÚs d'origine avant toute réécriture recordPageVisit(context.originPathname); return next();});
Ajouté à la version :
astro@2.4.0
locals est un objet utilisĂ© pour stocker et accĂ©der Ă des informations arbitraires pendant le cycle de vie dâune requĂȘte. Astro.locals est un objet contenant toutes les valeurs de lâobjet context.locals dĂ©fini par le middleware. Utilisez-le pour accĂ©der aux donnĂ©es renvoyĂ©es par le middleware dans vos fichiers .astro.
Les fonctions middleware peuvent à la fois lire et écrire les valeurs de context.locals :
import type { MiddlewareHandler } from 'astro';
export const onRequest: MiddlewareHandler = ({ locals }, next) => { if (!locals.title) { locals.title = "Titre par dĂ©faut"; } return next();}Les composants Astro et les points de terminaison de lâAPI peuvent lire les valeurs depuis locals lorsquâelles sâaffichent :
---const title = Astro.locals.title;---<h1>{title}</h1>import type { APIContext } from 'astro';
export function GET({ locals }: APIContext) { return new Response(locals.title); // "Titre par défaut"}preferredLocale
Section intitulée « preferredLocale »Type : string | undefined
astro@3.5.0
preferredLocale est une valeur calculée pour trouver la meilleure correspondance entre les préférences linguistiques du navigateur de votre visiteur et les paramÚtres régionaux pris en charge par votre site.
Elle est calculĂ©e en vĂ©rifiant les paramĂštres rĂ©gionaux configurĂ©s dans votre tableau i18n.locales et les paramĂštres rĂ©gionaux pris en charge par le navigateur de lâutilisateur via lâen-tĂȘte Accept-Language. Cette valeur est undefined si aucune correspondance de ce type nâexiste.
Cette propriĂ©tĂ© est uniquement disponible pour les routes rendues Ă la demande et ne peut pas ĂȘtre utilisĂ©e sur des pages statiques prĂ©-rendues.
preferredLocaleList
Section intitulée « preferredLocaleList »Type : string[] | undefined
astro@3.5.0
preferredLocaleList représente le tableau de tous les paramÚtres régionaux demandés par le navigateur et pris en charge par votre site web. Cela génÚre une liste de toutes les langues compatibles entre votre site et votre visiteur.
Si aucune des langues demandĂ©es par le navigateur nâest trouvĂ©e dans votre tableau locales, alors la valeur est []. Cela se produit lorsque vous ne prenez en charge aucun des paramĂštres rĂ©gionaux prĂ©fĂ©rĂ©s de vos visiteurs.
Si le navigateur ne spécifie aucune langue préférée, alors cette valeur sera celle de i18n.locales : tous vos paramÚtres régionaux pris en charge seront considérés comme également préférés par un visiteur sans préférences.
Cette propriĂ©tĂ© nâest disponible que pour lâaffichage cĂŽtĂ© serveur (SSR) et ne doit pas ĂȘtre utilisĂ©e pour les sites statiques.
currentLocale
Section intitulée « currentLocale »Type : string | undefined
astro@3.5.6
Les paramĂštres rĂ©gionaux calculĂ©s Ă partir de lâURL actuelle, en utilisant la syntaxe spĂ©cifiĂ©e dans votre configuration locales. Si lâURL ne contient pas de prĂ©fixe /[locale]/, la valeur par dĂ©faut sera i18n.defaultLocale.
getActionResult()
Section intitulée « getActionResult() »Type : (action: TAction) => ActionReturnType<TAction> | undefined
astro@4.15.0
getActionResult() est une fonction qui renvoie le rĂ©sultat dâune soumission dâAction. Celle-ci accepte une fonction dâaction comme argument (par exemple, actions.logout) et renvoie un objet data ou error lorsquâune soumission est reçue. Sinon, elle renverra undefined.
---import { actions } from 'astro:actions';
const result = Astro.getActionResult(actions.logout);---
<form action={actions.logout}> <button type="submit">Se dĂ©connecter</button></form>{result?.error && <p>Ăchec de la dĂ©connexion. Veuillez rĂ©essayer.</p>}callAction()
Section intitulée « callAction() »
Ajouté à la version :
astro@4.15.0
callAction() est une fonction utilisĂ©e pour appeler un gestionnaire dâAction directement depuis votre composant Astro. Celle-ci accepte une fonction Action comme premier argument (par exemple actions.logout) et toute entrĂ©e que lâaction reçoit comme deuxiĂšme argument. Elle renvoie le rĂ©sultat de lâaction sous forme de promesse.
---import { actions } from 'astro:actions';
const { data, error } = await Astro.callAction(actions.logout, { userId: '123' });---routePattern
Section intitulée « routePattern »Type : string
astro@5.0.0
Le modĂšle de route chargĂ© de gĂ©nĂ©rer la page ou la route actuelle. Dans le routage basĂ© sur des fichiers, cela ressemble au chemin dâaccĂšs au fichier de votre projet utilisĂ© pour crĂ©er la route. Lorsque les intĂ©grations crĂ©ent des routes pour votre projet, context.routePattern est identique Ă la valeur de injectRoute.pattern.
La valeur commencera par une barre oblique et ressemblera au chemin dâun composant de page par rapport Ă votre dossier src/pages/ sans extension de fichier.
Par exemple, le fichier src/pages/en/blog/[slug].astro renverra /en/blog/[slug] pour routePattern. Chaque page de votre site gĂ©nĂ©rĂ©e par ce fichier (par exemple /en/blog/post-1/, /en/blog/post-2/, etc.) partage la mĂȘme valeur pour routePattern. Dans le cas des routes index.*, le modĂšle de route nâinclura pas le mot « index ». Par exemple, src/pages/index.astro renverra /.
Vous pouvez utiliser cette propriĂ©tĂ© pour comprendre quelle route effectue le rendu de votre composant. Cela vous permet de cibler ou dâanalyser ensemble les URL de pages gĂ©nĂ©rĂ©es de maniĂšre similaire. Par exemple, vous pouvez lâutiliser pour restituer certaines informations de maniĂšre conditionnelle ou collecter des mesures sur les routes les plus lentes.
Type : AstroCookies
astro@1.4.0
cookies contient des utilitaires pour lire et manipuler les cookies pour les routes rendues Ă la demande.
Utilitaires de cookies
Section intitulée « Utilitaires de cookies »cookies.get()
Section intitulée « cookies.get() »Type : (key: string, options?: AstroCookieGetOptions) => AstroCookie | undefined
Obtient le cookie sous la forme dâun objet AstroCookie, qui contient la value et des fonctions utilitaires pour convertir le cookie en types autres que des chaĂźnes de caractĂšres.
cookies.has()
Section intitulée « cookies.has() »Type : (key: string, options?: AstroCookieGetOptions) => boolean
Détermine si ce cookie existe. Si le cookie a été défini via Astro.cookies.set() cela retournera true, sinon cela vérifiera les cookies dans Astro.request.
cookies.set()
Section intitulée « cookies.set() »Type : (key: string, value: string | object, options?: AstroCookieSetOptions) => void
Définit la clé du cookie (key) sur la valeur donnée. Cela tentera de convertir la valeur du cookie en une chaßne de caractÚres. Les options permettent de définir les caractéristiques du cookie, comme maxAge ou httpOnly.
cookies.delete()
Section intitulée « cookies.delete() »Type : (key: string, options?: AstroCookieDeleteOptions) => void
Invalide un cookie en dĂ©finissant la date dâexpiration dans le passĂ© (0 en temps Unix).
Une fois quâun cookie est « supprimé » (expirĂ©), Astro.cookies.has() retournera false et Astro.cookies.get() retournera un AstroCookie avec une valeur (value) indĂ©finie (undefined). Les options disponibles lors de la suppression dâun cookie sont : domain, path, httpOnly, sameSite, et secure.
cookies.merge()
Section intitulée « cookies.merge() »Type : (cookies: AstroCookies) => void
Fusionne une nouvelle instance AstroCookies dans lâinstance actuelle. Tous les nouveaux cookies seront ajoutĂ©s Ă lâinstance actuelle et tous les cookies portant le mĂȘme nom remplaceront les valeurs existantes.
cookies.headers()
Section intitulée « cookies.headers() »Type : () => Iterator<string>
Obtient les valeurs de lâen-tĂȘte Set-Cookie qui seront envoyĂ©es avec la rĂ©ponse.
Type AstroCookie
Section intitulĂ©e « Type AstroCookie »Le type renvoyĂ© aprĂšs lâobtention dâun cookie via Astro.cookies.get(). Il a la structure suivante :
Type : string
La valeur brute de la chaĂźne du cookie.
Type : () => Record<string, any>
Analyse la valeur du cookie via JSON.parse(), retournant un objet. GĂ©nĂšre une erreur si la valeur du cookie nâest pas un JSON valide.
Type : () => number
Analyse la valeur du cookie en tant que nombre. Renvoie NaN sâil ne sâagit pas dâun nombre valide.
Type : () => boolean
Convertit la valeur du cookie en un booléen.
AstroCookieGetOptions
Section intitulée « AstroCookieGetOptions »
Ajouté à la version :
astro@4.1.0
Lâinterface AstroCookieGetOption vous permet de spĂ©cifier des options lorsque vous recevez un cookie.
Type : (value: string) => string
Permet de personnaliser la maniÚre dont un cookie est désérialisé en une valeur.
AstroCookieSetOptions
Section intitulée « AstroCookieSetOptions »
Ajouté à la version :
astro@4.1.0
AstroCookieSetOptions est un objet qui peut ĂȘtre transmis Ă Astro.cookies.set() lors de la dĂ©finition dâun cookie pour personnaliser la maniĂšre dont le cookie est sĂ©rialisĂ©.
Type : string
SpĂ©cifie le domaine. Si aucun domaine nâest dĂ©fini, la plupart des clients interprĂ©teront cela comme sâappliquant au domaine actuel.
Type : Date
SpĂ©cifie la date dâexpiration du cookie.
Type : boolean
Si la valeur est true, le cookie ne sera pas accessible cÎté client.
Type : number
Spécifie un nombre, en secondes, pour lequel le cookie est valide.
Type : string
Spécifie un sous-chemin du domaine dans lequel le cookie est appliqué.
partitioned
Section intitulée « partitioned »Type : boolean
astro@5.17.0
Si la valeur est true, le cookie est un cookie partitionnĂ©. Les cookies partitionnĂ©s ne peuvent ĂȘtre lus que dans le contexte du site de niveau supĂ©rieur dans lequel ils ont Ă©tĂ© dĂ©finis, ce qui permet de bloquer le suivi intersites tout en autorisant les utilisations lĂ©gitimes des cookies tiers.
Les cookies partitionnĂ©s doivent ĂȘtre dĂ©finis avec secure: true.
Type : boolean | 'lax' | 'none' | 'strict'
SpĂ©cifie la valeur de lâen-tĂȘte du cookie SameSite.
Type : boolean
Si câest vrai, le cookie nâest dĂ©fini que sur les sites https.
Type : (value: string) => string
Permet de personnaliser la façon dont le cookie est sérialisé.
Type : AstroSession
astro@5.7.0
session est un objet qui permet de stocker des donnĂ©es entre les requĂȘtes pour les routes rendues Ă la demande. Il est associĂ© Ă un cookie qui contient uniquement lâID de session : les donnĂ©es elles-mĂȘmes ne sont pas stockĂ©es dans le cookie.
La session est créée lors de la premiĂšre utilisation et le cookie de session est automatiquement dĂ©fini. Lâobjet session a pour valeur undefined si aucun stockage de session nâa Ă©tĂ© configurĂ©, ou si la route actuelle est prĂ©-rendue, et enregistrera une erreur si vous essayez de lâutiliser.
Consultez le guide des sessions pour plus dâinformations sur la façon dâutiliser les sessions dans votre projet Astro.
Type : (key: string) => Promise<any>
Renvoie la valeur de la clĂ© donnĂ©e dans la session. Si la clĂ© nâexiste pas, la fonction renvoie undefined.
---const cart = await Astro.session?.get('cart');---<button>đ {cart?.length}</button>import type { APIContext } from 'astro';
export async function GET({ session }: APIContext) { const cart = await session.get('cart'); return Response.json({ cart });}Type : (key: string, value: any, options?: { ttl: number }) => void
DĂ©finit la valeur de la clĂ© donnĂ©e dans la session. Cette valeur peut ĂȘtre de tout type sĂ©rialisable. Cette mĂ©thode est synchrone et la valeur est immĂ©diatement disponible pour rĂ©cupĂ©ration, mais elle nâest enregistrĂ©e dans le backend quâĂ la fin de la requĂȘte.
---const { slug } = Astro.params;Astro.session?.set('lastViewedProduct', slug);---import type { APIContext } from 'astro';
export async function POST({ session, request }: APIContext) { const cart = await session.get('cart'); const newItem = await request.json(); cart.push(newItem); // Enregistrer le panier mis Ă jour dans la session session.set('cart', cart); return Response.json({ cart });}regenerate()
Section intitulée « regenerate() »Type : () => void
RĂ©gĂ©nĂšre lâID de session. Appelez cette fonction lorsquâun utilisateur se connecte ou augmente ses privilĂšges, afin dâĂ©viter les attaques par fixation de session.
---Astro.session?.regenerate();---import type { APIContext } from 'astro';
export async function POST({ session }: APIContext) { // Authentifier l'utilisateur... doLogin(); // RĂ©gĂ©nĂ©rer l'ID de session pour empĂȘcher les attaques de fixation de session session.regenerate(); return Response.json({ success: true });}destroy()
Section intitulée « destroy() »Type : () => void
DĂ©truit la session en supprimant le cookie et lâobjet du backend. Appelez cette fonction lorsquâun utilisateur se dĂ©connecte ou que sa session est invalidĂ©e.
---Astro.session?.destroy();return Astro.redirect('/login');---import type { APIContext } from 'astro';
export async function POST({ session }: APIContext) { session.destroy(); return Response.json({ success: true });}Type : (id: string) => Promise<void>
Charge une session par identifiant. En utilisation normale, une session est chargĂ©e automatiquement Ă partir du cookie de requĂȘte. Utilisez cette mĂ©thode pour charger une session Ă partir dâun identifiant diffĂ©rent. Ceci est utile si vous gĂ©rez vous-mĂȘme lâidentifiant de session ou si vous souhaitez suivre une session sans utiliser de cookies.
---// Charger la session Ă partir d'un en-tĂȘte au lieu de cookiesconst sessionId = Astro.request.headers.get('x-session-id');await Astro.session?.load(sessionId);const cart = await Astro.session?.get('cart');---<h1>Votre panier</h1><ul> {cart?.map((item) => ( <li>{item.name}</li> ))}</ul>import type { APIRoute } from 'astro';
export const GET: APIRoute = async ({ session, request }) => { // Charger la session Ă partir d'un en-tĂȘte au lieu de cookies const sessionId = request.headers.get('x-session-id'); await session.load(sessionId); const cart = await session.get('cart'); return Response.json({ cart });};PropriĂ©tĂ©s dâobjet dĂ©prĂ©ciĂ©es
Section intitulĂ©e « PropriĂ©tĂ©s dâobjet dĂ©prĂ©ciĂ©es »Astro.glob()
Section intitulée « Astro.glob() »Utilisez import.meta.glob de Vite pour interroger les fichiers de projet.
Astro.glob('../pages/post/*.md') peut ĂȘtre remplacĂ© par :
Object.values(import.meta.glob('../pages/post/*.md', { eager: true }));
Consultez le guide dâimportation pour plus dâinformations et dâutilisation.
Astro.glob() est un moyen de charger de nombreux fichiers locaux dans la configuration de votre site statique.
---const posts = await Astro.glob('../pages/post/*.md'); // renvoie un tableau d'articles qui se trouvent dans ./src/pages/post/*.md---
<div>{posts.slice(0, 3).map((post) => ( <article> <h2>{post.frontmatter.title}</h2> <p>{post.frontmatter.description}</p> <a href={post.url}>Lire la suite</a> </article>))}</div>.glob() ne prend quâun seul paramĂštre : une URL relative glob des fichiers locaux que vous souhaitez importer. Elle est asynchrone et renvoie un tableau des exportations des fichiers correspondants.
.glob() ne peut pas prendre de variables ou de chaĂźnes de caractĂšres qui les interpolent, car elles ne sont pas analysables statiquement. (Consultez le guide dâimportation pour une solution de contournement.) Ceci est dĂ» au fait que Astro.glob() est un wrapper de import.meta.glob() de Vite.
Vous pouvez Ă©galement utiliser import.meta.glob() lui-mĂȘme dans votre projet Astro. Vous pouvez le faire lorsque :
- Vous avez besoin de cette fonctionnalité dans un fichier autre que
.astro, comme une route API.Astro.glob()nâest disponible que dans les fichiers.astro, tandis queimport.meta.glob()est disponible nâimporte oĂč dans le projet. - Vous ne souhaitez pas charger chaque fichier immĂ©diatement.
import.meta.glob()peut renvoyer des fonctions qui importent le contenu du fichier, plutĂŽt que de renvoyer le contenu lui-mĂȘme. Notez que cette importation inclut tous les styles et scripts de tous les fichiers importĂ©s. Ceux-ci seront regroupĂ©s et ajoutĂ©s Ă la page, quâun fichier soit rĂ©ellement utilisĂ© ou non, car cela est dĂ©cidĂ© par une analyse statique, et non au moment de lâexĂ©cution. - Vous souhaitez accĂ©der au chemin de chaque fichier.
import.meta.glob()renvoie une association du chemin dâun fichier et de son contenu, tandis queAstro.glob()renvoie une liste de contenu. - Vous souhaitez transmettre plusieurs modĂšles ; par exemple, vous souhaitez ajouter un « modĂšle nĂ©gatif » qui filtre certains fichiers.
import.meta.glob()peut Ă©ventuellement prendre un tableau de chaĂźnes glob, plutĂŽt quâune seule chaĂźne de caractĂšres.
En savoir plus dans la documentation de Vite.
Fichiers Markdown
Section intitulĂ©e « Fichiers Markdown »Les fichiers Markdown chargĂ©s avec Astro.glob() renvoient lâinterface MarkdownInstance suivante :
export interface MarkdownInstance<T extends Record<string, any>> { /* Toutes les donnĂ©es spĂ©cifiĂ©es dans le frontmatter YAML/TOML de ce fichier */ frontmatter: T; /* Le chemin d'accĂšs absolu de ce fichier */ file: string; /* Le chemin rendu de ce fichier */ url: string | undefined; /* Composant Astro qui restitue le contenu de ce fichier */ Content: AstroComponentFactory; /** (Markdown uniquement) Contenu du fichier Markdown brut, Ă l'exclusion de la mise en page HTML et du frontmatter YAML/TOML */ rawContent(): string; /** (Markdown uniquement) Fichier Markdown compilĂ© en HTML, Ă l'exclusion de la mise en page HTML */ compiledContent(): string; /* Fonction qui renvoie un tableau des Ă©lĂ©ments h1...h6 dans ce fichier */ getHeadings(): Promise<{ depth: number; slug: string; text: string }[]>; default: AstroComponentFactory;}Vous pouvez Ă©ventuellement fournir un type pour la variable frontmatter Ă lâaide dâun gĂ©nĂ©rique TypeScript.
---interface Frontmatter { title: string; description?: string;}const posts = await Astro.glob<Frontmatter>('../pages/post/*.md');---
<ul> {posts.map(post => <li>{post.frontmatter.title}</li>)}</ul>Fichiers Astro
Section intitulĂ©e « Fichiers Astro »Les fichiers Astro ont lâinterface suivante :
export interface AstroInstance { /* Le chemin d'accÚs de ce fichier */ file: string; /* L'URL de ce fichier (s'il se trouve dans le répertoire des pages) */ url: string | undefined; default: AstroComponentFactory;}Autres fichiers
Section intitulĂ©e « Autres fichiers »Dâautres fichiers peuvent avoir diffĂ©rentes interfaces, mais Astro.glob() accepte un gĂ©nĂ©rique TypeScript si vous savez exactement ce que contient un type de fichier non reconnu.
---interface CustomDataFile { default: Record<string, any>;}const data = await Astro.glob<CustomDataFile>('../data/**/*.js');---