Nuxt · npm

Mettez Nuxt en cache par étiquette, en une ligne.

@canner-ca/nuxt-cache pose les en-têtes Cache-Control et Surrogate-Key dont Canner a besoin — correctement, à chaque fois — partout où Nuxt permet de poser des en-têtes de réponse : pages, routes serveur et middleware. Aucune dépendance.

$npm install @canner-ca/nuxt-cache

Utilisation

Pages

Passez l'événement de requête. Côté client, useRequestEvent() est undefined, donc l'appel ne fait rien sans risque.

<script setup>
import { cache } from '@canner-ca/nuxt-cache';

const route = useRoute();
const { data: post } = await useAsyncData(() => fetchPost(route.params.slug));

cache(useRequestEvent(), { ttl: 3600, tags: [post.value.id, 'blog-listing'] });
</script>

Routes serveur

Dans server/api ou server/routes, passez l'événement directement.

// server/api/posts.get.ts
import { cache } from '@canner-ca/nuxt-cache';

export default defineEventHandler((event) => {
  cache(event, { ttl: 3600, tags: ['blog-listing'] });
  return getPosts();
});

Middleware serveur

Marquez les chemins correspondants comme cachables, peu importe ce qui les rend.

// server/middleware/cache.ts
import { cache } from '@canner-ca/nuxt-cache';

export default defineEventHandler((event) => {
  if (event.path.startsWith('/blog/')) {
    cache(event, { ttl: 3600, tags: ['blog-listing'] });
  }
});

Pourquoi c'est sûr avec Nuxt

Nuxt fonctionne presque tel quel : la navigation côté client récupère les charges utiles depuis des URL distinctes, donc une URL de page ne renvoie que son document HTML. La seule exception à même URL est la coquille SPA que Nuxt renvoie lorsqu'une requête envoie x-nuxt-no-ssr — le proxy de Canner laisse passer ces requêtes, de sorte que seul le vrai document rendu côté serveur est mis en cache. Vous ne configurez rien de tout cela.

Options

ttlObligatoire. Secondes pendant lesquelles Canner peut servir la réponse en cache — pose s-maxage.tagsChaîne, nombre ou tableau. Pose Surrogate-Key. Les nombres sont convertis; les doublons et les étiquettes avec espaces sont écartés.browserTtlOptionnel. Secondes de cache côté navigateur (pose max-age). Omettez-le pour garder les purges instantanées.

Il ne fait qu'ajouter des en-têtes

L'utilitaire ne retire ni ne modifie jamais ce que votre application a posé. Il ne supprime pas Set-Cookie — Canner refuse déjà de mettre en cache une réponse qui pose un témoin, donc vous obtenez un avertissement en développement et votre témoin reste intact. Une durée invalide ne pose aucun en-tête et avertit; une cible null ne fait rien (le rendu côté client); seule une cible non prise en charge lève une erreur.

Puis dirigez votre CMS vers Canner

Le côté code est terminé. L'autre moitié, ce sont deux valeurs à copier — l'URL du webhook et un en-tête Authorization — affichées préremplies dans le tableau de bord sous Réglages → Cache. Guide complet du cache.

Code source et problèmes : tools/nuxt-cache/ dans le dépôt canner sur GitHub. Sous licence MIT. Aussi offert pour @canner-ca/astro-cache et @canner-ca/next-cache.