getServerSideProps

Lorsque vous exportez une fonction appelée getServerSideProps (Rendu côté serveur ou SSR) depuis une page, Next.js pré-rendra cette page à chaque requête en utilisant les données retournées par getServerSideProps. Ceci est utile si vous souhaitez récupérer des données qui changent fréquemment et que vous voulez que la page affiche les données les plus récentes.

import type { InferGetServerSidePropsType, GetServerSideProps } from 'next'

type Repo = {
  name: string
  stargazers_count: number
}

export const getServerSideProps = (async () => {
  // Récupérer les données depuis une API externe
  const res = await fetch('https://api.github.com/repos/vercel/next.js')
  const repo: Repo = await res.json()
  // Passer les données à la page via les props
  return { props: { repo } }
}) satisfies GetServerSideProps<{ repo: Repo }>

export default function Page({
  repo,
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
  return (
    <main>
      <p>{repo.stargazers_count}</p>
    </main>
  )
}

Vous pouvez importer des modules dans la portée globale pour les utiliser dans getServerSideProps. Les imports utilisés ne seront pas inclus dans le bundle côté client. Cela signifie que vous pouvez écrire du code côté serveur directement dans getServerSideProps, y compris la récupération de données depuis votre base de données.

Paramètre context

Le paramètre context est un objet contenant les clés suivantes :

NomDescription
paramsSi cette page utilise une route dynamique, params contient les paramètres de la route. Si le nom de la page est [id].js, alors params ressemblera à { id: ... }.
reqL'objet HTTP IncomingMessage, avec une propriété supplémentaire cookies, qui est un objet avec des clés de type chaîne de caractères mappant vers des valeurs de cookies.
resL'objet de réponse HTTP.
queryUn objet représentant la chaîne de requête, incluant les paramètres de route dynamique.
preview(Déprécié pour draftMode) preview est true si la page est en Mode Prévisualisation et false sinon.
previewData(Déprécié pour draftMode) Les données de prévisualisation définies par setPreviewData.
draftModedraftMode est true si la page est en Mode Brouillon et false sinon.
resolvedUrlUne version normalisée de l'URL de requête qui supprime le préfixe _next/data pour les transitions client et inclut les valeurs de requête originales.
localeContient la locale active (si activée).
localesContient toutes les locales supportées (si activées).
defaultLocaleContient la locale par défaut configurée (si activée).

Valeurs de retour de getServerSideProps

La fonction getServerSideProps doit retourner un objet avec l'une des propriétés suivantes :

props

L'objet props est une paire clé-valeur, où chaque valeur est reçue par le composant de la page. Il doit s'agir d'un objet sérialisable afin que toutes les props passées puissent être sérialisées avec JSON.stringify.

export async function getServerSideProps(context) {
  return {
    props: { message: `Next.js est génial` }, // sera passé au composant de page comme props
  }
}

notFound

Le booléen notFound permet à la page de retourner un statut 404 et une Page 404. Avec notFound: true, la page retournera un 404 même si une page avait été générée avec succès auparavant. Ceci est destiné à supporter des cas d'usage comme du contenu généré par l'utilisateur qui serait supprimé par son auteur.

export async function getServerSideProps(context) {
  const res = await fetch(`https://.../data`)
  const data = await res.json()

  if (!data) {
    return {
      notFound: true,
    }
  }

  return {
    props: { data }, // sera passé au composant de page comme props
  }
}

redirect

L'objet redirect permet de rediriger vers des ressources internes ou externes. Il doit correspondre à la forme { destination: string, permanent: boolean }. Dans de rares cas, vous pourriez avoir besoin d'attribuer un code de statut personnalisé pour que les anciens clients HTTP redirigent correctement. Dans ces cas, vous pouvez utiliser la propriété statusCode à la place de permanent, mais pas les deux.

export async function getServerSideProps(context) {
  const res = await fetch(`https://.../data`)
  const data = await res.json()

  if (!data) {
    return {
      redirect: {
        destination: '/',
        permanent: false,
      },
    }
  }

  return {
    props: {}, // sera passé au composant de page comme props
  }
}

Historique des versions

VersionChangements
v13.4.0App Router est maintenant stable avec une récupération de données simplifiée
v10.0.0Ajout des options locale, locales, defaultLocale, et notFound.
v9.3.0Introduction de getServerSideProps.

On this page