Transformateurs de données
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Vous pouvez sérialiser les données de réponse et les arguments d'entrée. Les transformateurs doivent être ajoutés à la fois côté serveur et client.
Utilisation de superjson
SuperJSON nous permet d'utiliser de manière transparente des objets standards comme Date, Map ou Set à travers le réseau entre le serveur et le client. Vous pouvez ainsi retourner ces types depuis votre résolveur d'API et les utiliser côté client sans avoir à recréer les objets depuis JSON.
Procédure
1. Installation
bashyarn add superjson
bashyarn add superjson
2. Ajout à votre initTRPC
routers/router/_app.tstsimport { initTRPC } from '@trpc/server';import superjson from 'superjson';export const t = initTRPC.create({transformer: superjson,});
routers/router/_app.tstsimport { initTRPC } from '@trpc/server';import superjson from 'superjson';export const t = initTRPC.create({transformer: superjson,});
3. Ajout à createTRPCProxyClient() ou createTRPCNext()
tsimport { createTRPCProxyClient } from '@trpc/client';import type { AppRouter } from '~/server/routers/_app';import superjson from 'superjson';export const client = createTRPCProxyClient<AppRouter>({transformer: superjson, // <--// [...]});
tsimport { createTRPCProxyClient } from '@trpc/client';import type { AppRouter } from '~/server/routers/_app';import superjson from 'superjson';export const client = createTRPCProxyClient<AppRouter>({transformer: superjson, // <--// [...]});
utils/trpc.tstsimport { createTRPCNext } from '@trpc/next';import type { AppRouter } from '~/server/routers/_app';import superjson from 'superjson';// [...]export const trpc = createTRPCNext<AppRouter>({config(config) {return {transformer: superjson, // <--};},// [...]});
utils/trpc.tstsimport { createTRPCNext } from '@trpc/next';import type { AppRouter } from '~/server/routers/_app';import superjson from 'superjson';// [...]export const trpc = createTRPCNext<AppRouter>({config(config) {return {transformer: superjson, // <--};},// [...]});
Transformateurs différents pour l'envoi et la réception
Si un transformateur doit être utilisé dans une seule direction ou si des transformateurs différents sont nécessaires pour l'envoi et la réception (par exemple pour des raisons de performance), vous pouvez fournir des transformateurs individuels. Veillez à utiliser le même transformateur combiné partout.
Procédure
Ici, superjson est utilisé pour l'envoi et devalue pour la réception des données, car devalue est beaucoup plus rapide mais présente des risques de sécurité côté serveur.
1. Installation
bashyarn add superjson devalue
bashyarn add superjson devalue
2. Ajout à utils/trpc.ts
utils/trpc.tstsimport { uneval } from 'devalue';import superjson from 'superjson';// [...]export const transformer = {input: superjson,output: {serialize: (object) => uneval(object),// This `eval` only ever happens on the **client**.deserialize: (object) => (0, eval)(`(${object})`),},};
utils/trpc.tstsimport { uneval } from 'devalue';import superjson from 'superjson';// [...]export const transformer = {input: superjson,output: {serialize: (object) => uneval(object),// This `eval` only ever happens on the **client**.deserialize: (object) => (0, eval)(`(${object})`),},};
3. Ajout à votre AppRouter
server/routers/_app.tstsimport { initTRPC } from '@trpc/server';import { transformer } from '../../utils/trpc';export const t = initTRPC.create({transformer,});export const appRouter = t.router({// [...]});
server/routers/_app.tstsimport { initTRPC } from '@trpc/server';import { transformer } from '../../utils/trpc';export const t = initTRPC.create({transformer,});export const appRouter = t.router({// [...]});
4. Ajout à createTRPCProxyClient()
client.tstsimport { createTRPCProxyClient } from '@trpc/client';import { transformer } from '../utils/trpc';export const client = createTRPCProxyClient<AppRouter>({transformer, // <--// [...]});
client.tstsimport { createTRPCProxyClient } from '@trpc/client';import { transformer } from '../utils/trpc';export const client = createTRPCProxyClient<AppRouter>({transformer, // <--// [...]});
Interface DataTransformer
tsexport interface DataTransformer {serialize(object: any): any;deserialize(object: any): any;}interface InputDataTransformer extends DataTransformer {/*** This function runs **on the client** before sending the data to the server.*/serialize(object: any): any;/*** This function runs **on the server** to transform the data before it is passed to the resolver*/deserialize(object: any): any;}interface OutputDataTransformer extends DataTransformer {/*** This function runs **on the server** before sending the data to the client.*/serialize(object: any): any;/*** This function runs **only on the client** to transform the data sent from the server.*/deserialize(object: any): any;}export interface CombinedDataTransformer {/*** Specify how the data sent from the client to the server should be transformed.*/input: InputDataTransformer;/*** Specify how the data sent from the server to the client should be transformed.*/output: OutputDataTransformer;}
tsexport interface DataTransformer {serialize(object: any): any;deserialize(object: any): any;}interface InputDataTransformer extends DataTransformer {/*** This function runs **on the client** before sending the data to the server.*/serialize(object: any): any;/*** This function runs **on the server** to transform the data before it is passed to the resolver*/deserialize(object: any): any;}interface OutputDataTransformer extends DataTransformer {/*** This function runs **on the server** before sending the data to the client.*/serialize(object: any): any;/*** This function runs **only on the client** to transform the data sent from the server.*/deserialize(object: any): any;}export interface CombinedDataTransformer {/*** Specify how the data sent from the client to the server should be transformed.*/input: InputDataTransformer;/*** Specify how the data sent from the server to the client should be transformed.*/output: OutputDataTransformer;}