API de l'Adaptateur d'Astro
Astro est conçu pour faciliter le déploiement vers n’importe quel fournisseur de cloud pour le rendu à la demande, également appelé rendu côté serveur (SSR). Cette capacité est fournie par des adaptateurs, qui sont des intégrations. Consultez le guide de rendu à la demande pour apprendre à utiliser un adaptateur existant.
Qu’est-ce qu’un adaptateur ?
Titre de la section Qu’est-ce qu’un adaptateur ?Un adaptateur est un type particulier d’intégration qui fournit un point d’entrée pour le rendu du serveur au moment de la demande. Un adaptateur a deux fonctions :
- Implémente les API spécifiques à l’hôte pour gérer les requêtes.
- Configure la compilation en fonction des conventions de l’hôte.
Construire un adaptateur
Titre de la section Construire un adaptateurUn adaptateur est une intégration et peut faire tout ce qu’une intégration peut faire.
Un adaptateur doit appeler l’API setAdapter
dans le hook astro:config:done
comme suit :
L’objet passé dans setAdapter
est défini comme ceci :
Les propriétés sont les suivantes :
- name : Un nom unique pour votre adaptateur, utilisé pour la journalisation.
- serverEntrypoint : Le point d’entrée pour le rendu du serveur à la demande.
- exports : Un tableau d’exportations nommées lorsqu’il est utilisé en conjonction avec
createExports
(expliqué ci-dessous). - adapterFeatures : Un objet qui active des fonctionnalités spécifiques qui doivent être supportées par l’adaptateur. Ces fonctionnalités vont changer la sortie construite, et l’adaptateur doit implémenter la logique appropriée pour gérer la sortie différente.
- supportedAstroFeatures : Une liste des caractéristiques intégrées d’Astro. Cela permet à Astro de déterminer quelles fonctionnalités un adaptateur ne peut pas ou ne veut pas supporter afin que les messages d’erreur appropriés puissent être fournis.
Point d’entrée du serveur
Titre de la section Point d’entrée du serveurL’API de l’adaptateur Astro tente de fonctionner avec n’importe quel type d’hôte, et offre un moyen flexible de se conformer aux API de l’hôte.
Exportations
Titre de la section ExportationsCertains hôtes sans serveur attendent de vous que vous exportiez une fonction, comme handler
:
Avec l’API de l’adaptateur, vous y parvenez en implémentant createExports
dans votre serverEntrypoint
:
Ensuite, dans votre intégration, lorsque vous appelez setAdapter
, fournissez ce nom dans exports
:
Certains hôtes attendent que vous démarriez le serveur vous-mêmes, par exemple en écoutant un port. Pour ces types d’hôtes, l’API de l’adaptateur vous permet d’exporter une fonction start
qui sera appelée lors de l’exécution du script bundle.
astro/app
Titre de la section astro/appCe module est utilisé pour afficher les pages qui ont été pré-construites par astro build
. Astro utilise les objets standards Request et Response. Les hôtes qui ont une API différente pour les requêtes/réponses doivent convertir ces types dans leur adaptateur.
Les méthodes suivantes sont proposées :
app.render()
Titre de la section app.render()Type : (request: Request, options?: RenderOptions) => Promise<Response>
Cette méthode appelle la page Astro qui correspond à la demande, l’affiche et renvoie une promesse à un objet Response. Cette méthode fonctionne également pour les routes API qui n’affichent pas de pages.
RenderOptions
Titre de la section RenderOptionsType : {addCookieHeader?: boolean; clientAddress?: string; locals?: object; routeData?: RouteData;}
La méthode app.render()
accepte un argument obligatoire request
, et un objet optionnel RenderOptions
pour addCookieHeader
, clientAddress
, locals
, et routeData
.
addCookieHeader
Titre de la section addCookieHeaderType : boolean
Par défaut : false
Ajouter ou non automatiquement tous les cookies écrits par Astro.cookie.set()
aux en-têtes de la réponse.
Lorsqu’ils sont définis à true
, ils seront ajoutés à l’en-tête Set-Cookie
de la réponse sous forme de paires clé-valeur séparées par des virgules. Vous pouvez utiliser l’API standard response.headers.getSetCookie()
pour les lire individuellement.
Si la valeur est false
(par défaut), les cookies ne seront disponibles qu’à partir de App.getSetCookieFromResponse(response)
.
clientAddress
Titre de la section clientAddressType : string
Par défaut : request[Symbol.for("astro.clientAddress")]
L’adresse IP du client qui sera disponible en tant que Astro.clientAddress
dans les pages, et en tant que ctx.clientAddress
dans les routes de l’API et le middleware.
L’exemple ci-dessous lit l’en-tête x-forwarded-for
et le transmet comme clientAddress
. Cette valeur devient disponible pour l’utilisateur en tant que Astro.clientAddress
.
Type : object
L’objet context.locals
utilisé pour stocker et accéder aux informations pendant le cycle de vie d’une requête.
L’exemple ci-dessous lit un en-tête nommé x-private-header
, tente de l’analyser comme un objet et de le passer à locals
, qui peut alors être passé à n’importe quelle fonction middleware.
routeData
Titre de la section routeDataType : RouteData
Par défaut : app.match(request)
Fournissez une valeur pour routeData
si vous connaissez déjà la route à afficher. Vous éviterez ainsi l’appel interne à app.match
pour déterminer la route à afficher.
app.match()
Titre de la section app.match()Type : (request: Request) => RouteData | undefined
Cette méthode est utilisée pour déterminer si une demande est conforme aux règles de routage de l’application Astro.
Vous pouvez généralement appeler app.render(request)
sans utiliser .match
car Astro gère les 404 si vous fournissez un fichier 404.astro
. Utilisez app.match(request)
si vous voulez gérer les 404 d’une manière différente.
Autoriser l’installation via astro add
Titre de la section Autoriser l’installation via astro addLa commande astro add
permet aux utilisateurs d’ajouter facilement des intégrations et des adaptateurs à leur projet. Si vous voulez que votre adaptateur soit installable avec cet outil, ajoutez astro-adapter
au champ keywords
dans votre package.json
:
Une fois que vous avez publié votre adaptateur sur npm, lancer astro add example
installera votre paquet avec toutes les dépendances spécifiées dans votre package.json
. Nous demanderons également aux utilisateurs de mettre à jour manuellement la configuration de leur projet.
Fonctionnalités d’Astro
Titre de la section Fonctionnalités d’Astro
Ajouté à la version :
astro@3.0.0
Les fonctionnalités Astro permettent à un adaptateur d’indiquer à Astro s’il est en mesure de prendre en charge une fonctionnalité, ainsi que le niveau de prise en charge de l’adaptateur.
Lors de l’utilisation de ces propriétés, Astro
- exécute une validation spécifique ;
- émet des informations contextuelles dans les journaux ;
Ces opérations sont exécutées en fonction des fonctionnalités prises en charge ou non, de leur niveau de prise en charge et de la configuration utilisée par l’utilisateur.
La configuration suivante indique à Astro que cet adaptateur dispose d’un support expérimental pour le service d’image intégré optimisé par Sharp :
Si le service d’image Sharp est utilisé, Astro enregistrera un avertissement et une erreur sur le terminal en fonction de la prise en charge de votre adaptateur :
Un message peut également être fourni pour donner plus de contexte à l’utilisateur :
Fonctionnalités de l’adaptateur
Titre de la section Fonctionnalités de l’adaptateurUn ensemble de fonctionnalités qui modifient la sortie des fichiers émis. Lorsqu’un adaptateur opte pour ces fonctionnalités, il obtiendra des informations supplémentaires à l’intérieur de hooks spécifiques.
edgeMiddleware
Titre de la section edgeMiddlewareType : boolean
Définit si un code middleware de rendu à la demande sera regroupé lors de la construction.
Lorsque cette option est activée, elle empêche le code middleware d’être regroupé et importé par toutes les pages pendant la construction :
Ensuite, utilisez le hook astro:build:ssr
, qui vous donnera un middlewareEntryPoint
, une URL
vers le fichier physique sur le système de fichiers.
envGetSecret
Titre de la section envGetSecretType : AdapterSupportsKind
Il s’agit d’une fonctionnalité permettant à votre adaptateur de récupérer les secrets configurés par les utilisateurs dans env.schema
.
Activez la fonctionnalité en transmettant toute valeur AdapterSupportsKind
valide à l’adaptateur :
Le module astro/env/setup
vous permet de fournir une implémentation pour getSecret()
. Dans le point d’entrée de votre serveur, appelez setGetEnv()
dès que possible :
Si vous prenez en charge les secrets, assurez-vous d’appeler setGetEnv()
avant getSecret()
lorsque vos variables d’environnement sont liées à la requête :
buildOutput
Titre de la section buildOutputType : 'static' | 'server'
astro@5.0.0
Cette propriété vous permet de forcer une forme de sortie spécifique pour la construction. Cela peut être utile pour les adaptateurs qui fonctionnent uniquement avec un type de sortie spécifique, par exemple, votre adaptateur peut s’attendre à un site web statique, mais utilise un adaptateur pour créer des fichiers spécifiques à l’hôte. La valeur par défaut est server
si elle n’est pas spécifiée.