Datatransformatorer
Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →
Du kan serialisera svarsdata och indataargument. Transformatorerna måste läggas till både på servern och klienten.
Använda superjson
SuperJSON låter oss transparent använda standardobjekt som Date/Map/Set över nätverket mellan server och klient. Det innebär att du kan returnera dessa typer i din API-resolver och använda dem direkt i klienten utan att behöva återskapa objekten från JSON.
Så här gör du
1. Installera
bashyarn add superjson
bashyarn add superjson
2. Lägg till i createTRPCCLient() eller withTRPC()-konfigurationen
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. Lägg till i din 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(...)
Olika transformatorer för uppladdning och nedladdning
Om en transformator endast ska användas i en riktning, eller om olika transformatorer behövs för uppladdning och nedladdning (t.ex. av prestandaskäl), kan du ange separata transformatorer. Se till att använda samma kombinerade transformator överallt.
Så här gör du
Här används superjson för uppladdning och devalue för nedladdning av data, eftersom devalue är mycket snabbare men osäkert att använda på servern.
1. Installera
bashyarn add superjson devalue
bashyarn add superjson devalue
2. Lägg till i 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. Lägg till i 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. Lägg till i din 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(...)
DataTransformer-gränssnitt
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;};