Skip to content

Cache client

ts
import { 
createHttpClient
} from "@duplojs/http/client";
import {
E
,
unwrap
} from "@duplojs/utils";
import { type
Routes
} from "./types";
const
client
=
createHttpClient
<
Routes
>({
baseUrl
: "http://localhost:1506",
}); const
firstUsersRequest
= await
client
.
get
(
"/users", {
clientCache
: "auto" },
); const
secondUsersRequest
= await
client
.
get
(
"/users", {
clientCache
: "auto" },
); if (
E
.
isRight
(
secondUsersRequest
) &&
unwrap
(
secondUsersRequest
).
fromCache
) {
console
.
log
("Response loaded from cache.");
} const
refreshedUsersRequest
= await
client
.
get
(
"/users", {
clientCache
: "auto",
refreshClientCache
: true,
}, ); const
bypassedUsersRequest
= await
client
.
get
(
"/users", {
clientCache
: "auto",
bypassClientCache
: true,
}, ); const
customKeyRequest
= await
client
.
get
(
"/users/{userId}", {
params
: {
userId
: "42" },
clientCache
(
params
) {
return `user:${
params
.
path
}:${
params
.
params
?.
userId
?.
toString
()}`;
}, }, );

Le client HTTP peut mettre en cache les réponses côté client. Pour activer ce comportement sur une requête, il faut utiliser la prop clientCache.

Avec la valeur "auto", DuploJS construit une clé de cache à partir de :

  • la méthode HTTP
  • le path final avec les params injectés
  • la query triée par clé
  • le body

Vous pouvez aussi passer une fonction pour construire votre propre clé de cache.

Seules les réponses 2xx sont enregistrées dans le cache. Lorsqu'une réponse vient du cache, la propriété fromCache est définie à true.

Deux options permettent de contrôler ce comportement :

  • bypassClientCache: true ignore complètement le cache pour la requête courante : aucune lecture et aucune écriture.
  • refreshClientCache: true ignore uniquement la lecture du cache, refait la requête réseau, puis remplace la valeur en cache si la réponse est un succès.

INFO

Le cache client est local à l'instance de createHttpClient. Deux clients différents ne partagent pas le même cache.

Diffusé sous licence MIT.