Transformadores de Datos
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Puedes serializar los datos de respuesta y los argumentos de entrada. Los transformadores deben agregarse tanto en el servidor como en el cliente.
Uso de superjson
SuperJSON nos permite usar transparentemente tipos estándar como Date, Map o Set en la comunicación entre el servidor y el cliente. Es decir, puedes devolver cualquiera de estos tipos desde tu API-resolver y utilizarlos directamente en el cliente sin necesidad de reconstruir los objetos desde JSON.
Cómo hacerlo
1. Instalar
bashyarn add superjson
bashyarn add superjson
2. Agregar a tu initTRPC
server/routers/_app.tstsimport {initTRPC } from '@trpc/server';importsuperjson from 'superjson';export constt =initTRPC .create ({transformer :superjson ,});
server/routers/_app.tstsimport {initTRPC } from '@trpc/server';importsuperjson from 'superjson';export constt =initTRPC .create ({transformer :superjson ,});
3. Agregar a httpLink(), wsLink(), etc.
TypeScript te guiará sobre dónde agregar
transformeruna vez que lo hayas añadido al objetoinitTRPC.
createTRPCClient():
src/app/_trpc/client.tstsimport {createTRPCClient ,httpLink } from '@trpc/client';import type {AppRouter } from './server';importsuperjson from 'superjson';export constclient =createTRPCClient <AppRouter >({links : [httpLink ({url : 'http://localhost:3000',transformer :superjson ,}),],});
src/app/_trpc/client.tstsimport {createTRPCClient ,httpLink } from '@trpc/client';import type {AppRouter } from './server';importsuperjson from 'superjson';export constclient =createTRPCClient <AppRouter >({links : [httpLink ({url : 'http://localhost:3000',transformer :superjson ,}),],});
Uso de devalue
Devalue funciona de manera similar a superjson, priorizando el rendimiento y cargas útiles compactas, pero sacrificando la legibilidad humana del cuerpo.
Cómo hacerlo
1. Instalar
bashyarn add devalue
bashyarn add devalue
2. Agregar a utils/trpc.ts
Aquí usamos parse y stringify porque mitigan XSS.
utils/trpc.tstsimport {parse ,stringify } from 'devalue';// [...]export consttransformer = {deserialize : (object : any) =>parse (object ),serialize : (object : any) =>stringify (object ),};
utils/trpc.tstsimport {parse ,stringify } from 'devalue';// [...]export consttransformer = {deserialize : (object : any) =>parse (object ),serialize : (object : any) =>stringify (object ),};
3. Agregar a tu initTRPC
server/routers/_app.tstsimport {initTRPC } from '@trpc/server';import {transformer } from '../../utils/trpc';export constt =initTRPC .create ({transformer ,});
server/routers/_app.tstsimport {initTRPC } from '@trpc/server';import {transformer } from '../../utils/trpc';export constt =initTRPC .create ({transformer ,});
4. Agregar a httpLink(), wsLink(), etc.
TypeScript te guiará sobre dónde agregar
transformeruna vez que lo hayas añadido al objetoinitTRPC.
createTRPCClient():
src/app/_trpc/client.tstsimport {createTRPCClient ,httpLink } from '@trpc/client';import type {AppRouter } from './server/routers/_app';import {transformer } from './utils/trpc';export constclient =createTRPCClient <AppRouter >({links : [httpLink ({url : 'http://localhost:3000',transformer ,}),],});
src/app/_trpc/client.tstsimport {createTRPCClient ,httpLink } from '@trpc/client';import type {AppRouter } from './server/routers/_app';import {transformer } from './utils/trpc';export constclient =createTRPCClient <AppRouter >({links : [httpLink ({url : 'http://localhost:3000',transformer ,}),],});
Transformadores diferentes para subida y descarga
Si necesitas usar un transformador solo en una dirección o diferentes transformadores para subida y descarga (por ejemplo, por razones de rendimiento), puedes proporcionar transformadores individuales. Asegúrate de usar el mismo transformador combinado en todas partes.
Interfaz DataTransformer
tsexport interfaceDataTransformer {serialize (object : any): any;deserialize (object : any): any;}interfaceInputDataTransformer extendsDataTransformer {/*** 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;}interfaceOutputDataTransformer extendsDataTransformer {/*** 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 interfaceCombinedDataTransformer {/*** 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 interfaceDataTransformer {serialize (object : any): any;deserialize (object : any): any;}interfaceInputDataTransformer extendsDataTransformer {/*** 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;}interfaceOutputDataTransformer extendsDataTransformer {/*** 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 interfaceCombinedDataTransformer {/*** 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 ;}