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 servidor y cliente. Esto significa que puedes devolver cualquiera de estos tipos en tu API-resolver y utilizarlos directamente en el cliente sin reconstruir los objetos desde JSON.
Cómo hacerlo
1. Instalar
bashyarn add superjson
bashyarn add superjson
2. Agregar a la configuración de createTRPCCLient() o withTRPC()
client.tstsimport superjson from 'superjson';// [...]export const client = createTRPCClient<AppRouter>({// [...]transformer: superjson,});
client.tstsimport superjson from 'superjson';// [...]export const client = createTRPCClient<AppRouter>({// [...]transformer: superjson,});
pages/_app.tsxtsimport superjson from 'superjson';// [...]export default withTRPC<AppRouter>({config(config) {return {// [...]transformer: superjson,};},})(MyApp);
pages/_app.tsxtsimport superjson from 'superjson';// [...]export default withTRPC<AppRouter>({config(config) {return {// [...]transformer: superjson,};},})(MyApp);
3. Agregar a tu AppRouter
server/routers/_app.tstsimport * as trpc from '@trpc/server';import superjson from 'superjson';export const appRouter = trpc.router().transformer(superjson);// .query(...)
server/routers/_app.tstsimport * as trpc from '@trpc/server';import superjson from 'superjson';export const appRouter = trpc.router().transformer(superjson);// .query(...)
Transformadores diferentes para subida y descarga
Si un transformador debe usarse solo en una dirección o necesitas diferentes transformadores para subida y descarga (por ejemplo, por razones de rendimiento), puedes proporcionar transformadores individuales para cada operación. Asegúrate de usar el mismo transformador combinado en todos los puntos.
Cómo hacerlo
En este ejemplo se usa superjson para subir datos y devalue para descargar, porque devalue es mucho más rápido pero inseguro para usar en el servidor.
1. Instalar
bashyarn add superjson devalue
bashyarn add superjson devalue
2. Agregar a utils/trpc.ts
utils/trpc.tstsimport { uneval } from 'devalue';import superjson from 'superjson';// [...]export const transformer = {input: superjson,output: {serialize: (object) => uneval(object),deserialize: (object) => eval(`(${object})`),},};
utils/trpc.tstsimport { uneval } from 'devalue';import superjson from 'superjson';// [...]export const transformer = {input: superjson,output: {serialize: (object) => uneval(object),deserialize: (object) => eval(`(${object})`),},};
3. Agregar a createTRPCCLient()
client.tstsimport { transformer } from '../utils/trpc';// [...]export const client = createTRPCClient<AppRouter>({// [...]transformer: transformer,});
client.tstsimport { transformer } from '../utils/trpc';// [...]export const client = createTRPCClient<AppRouter>({// [...]transformer: transformer,});
4. Agregar a tu AppRouter
server/routers/_app.tstsimport * as trpc from '@trpc/server';import { transformer } from '../../utils/trpc';export const appRouter = trpc.router().transformer(transformer);// .query(...)
server/routers/_app.tstsimport * as trpc from '@trpc/server';import { transformer } from '../../utils/trpc';export const appRouter = trpc.router().transformer(transformer);// .query(...)
Interfaz DataTransformer
tstype DataTransformer = {serialize(object: any): any;deserialize(object: any): any;};type CombinedDataTransformer = {input: DataTransformer;output: DataTransformer;};
tstype DataTransformer = {serialize(object: any): any;deserialize(object: any): any;};type CombinedDataTransformer = {input: DataTransformer;output: DataTransformer;};