HTTP Batch-länk
Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →
httpBatchLink är en avslutande länk som samlar flera individuella tRPC-operationer till en enda HTTP-förfrågan som skickas till en enskild tRPC-procedure.
Användning
Du kan importera och lägga till httpBatchLink i links-arrayen så här:
client/index.tstsimport { createTRPCProxyClient, httpBatchLink } from '@trpc/client';import type { AppRouter } from '../server';const client = createTRPCProxyClient<AppRouter>({links: [httpBatchLink({url: 'http://localhost:3000',}),],});
client/index.tstsimport { createTRPCProxyClient, httpBatchLink } from '@trpc/client';import type { AppRouter } from '../server';const client = createTRPCProxyClient<AppRouter>({links: [httpBatchLink({url: 'http://localhost:3000',}),],});
Efter detta kan du utnyttja batchhantering genom att placera alla dina procedurer i ett Promise.all. Koden nedan genererar exakt en HTTP-förfrågan och på servern exakt en databasfråga:
tsconst somePosts = await Promise.all([trpc.post.byId.query(1),trpc.post.byId.query(2),trpc.post.byId.query(3),]);
tsconst somePosts = await Promise.all([trpc.post.byId.query(1),trpc.post.byId.query(2),trpc.post.byId.query(3),]);
Alternativ för httpBatchLink
httpBatchLink-funktionen tar ett alternativsobjekt med strukturen HTTPBatchLinkOptions.
tsexport interface HTTPBatchLinkOptions extends HTTPLinkOptions {maxURLLength?: number;}export interface HTTPLinkOptions {url: string;/*** Add ponyfill for fetch*/fetch?: typeof fetch;/*** Add ponyfill for AbortController*/AbortController?: typeof AbortController | null;/*** Headers to be set on outgoing requests or a callback that of said headers* @see http://trpc.io/docs/v10/header*/headers?:| HTTPHeaders| ((opts: { opList: Operation[] }) => HTTPHeaders | Promise<HTTPHeaders>);}
tsexport interface HTTPBatchLinkOptions extends HTTPLinkOptions {maxURLLength?: number;}export interface HTTPLinkOptions {url: string;/*** Add ponyfill for fetch*/fetch?: typeof fetch;/*** Add ponyfill for AbortController*/AbortController?: typeof AbortController | null;/*** Headers to be set on outgoing requests or a callback that of said headers* @see http://trpc.io/docs/v10/header*/headers?:| HTTPHeaders| ((opts: { opList: Operation[] }) => HTTPHeaders | Promise<HTTPHeaders>);}
Ställa in maximal URL-längd
Vid sändning av batchförfrågningar kan URL:en ibland bli för lång och orsaka HTTP-fel som 413 Payload Too Large, 414 URI Too Long och 404 Not Found. Alternativet maxURLLength begränsar antalet förfrågningar som kan skickas tillsammans i en batch.
client/index.tstsimport { createTRPCProxyClient, httpBatchLink } from '@trpc/client';import type { AppRouter } from '../server';const client = createTRPCProxyClient<AppRouter>({links: [httpBatchLink({url: 'http://localhost:3000',maxURLLength: 2083, // a suitable size}),],});
client/index.tstsimport { createTRPCProxyClient, httpBatchLink } from '@trpc/client';import type { AppRouter } from '../server';const client = createTRPCProxyClient<AppRouter>({links: [httpBatchLink({url: 'http://localhost:3000',maxURLLength: 2083, // a suitable size}),],});
Inaktivera batchhantering
1. Inaktivera batching på din server:
server.tstsimport { createHTTPServer } from '@trpc/server/adapters/standalone';createHTTPServer({// [...]// 👇 disable batchingbatching: {enabled: false,},});
server.tstsimport { createHTTPServer } from '@trpc/server/adapters/standalone';createHTTPServer({// [...]// 👇 disable batchingbatching: {enabled: false,},});
eller, om du använder Next.js:
pages/api/trpc/[trpc].tstsexport default trpcNext.createNextApiHandler({// [...]// 👇 disable batchingbatching: {enabled: false,},});
pages/api/trpc/[trpc].tstsexport default trpcNext.createNextApiHandler({// [...]// 👇 disable batchingbatching: {enabled: false,},});
2. Ersätt httpBatchLink med httpLink i din tRPC-klient
client/index.tstsimport { createTRPCProxyClient, httpLink } from '@trpc/client';import type { AppRouter } from '../server';const client = createTRPCProxyClient<AppRouter>({links: [httpLink({url: 'http://localhost:3000',}),],});
client/index.tstsimport { createTRPCProxyClient, httpLink } from '@trpc/client';import type { AppRouter } from '../server';const client = createTRPCProxyClient<AppRouter>({links: [httpLink({url: 'http://localhost:3000',}),],});
eller, om du använder Next.js:
utils/trpc.tstsximport type { AppRouter } from '@/server/routers/app';import { httpLink } from '@trpc/client';import { createTRPCNext } from '@trpc/next';export const trpc = createTRPCNext<AppRouter>({config() {return {links: [httpLink({url: '/api/trpc',}),],};},});
utils/trpc.tstsximport type { AppRouter } from '@/server/routers/app';import { httpLink } from '@trpc/client';import { createTRPCNext } from '@trpc/next';export const trpc = createTRPCNext<AppRouter>({config() {return {links: [httpLink({url: '/api/trpc',}),],};},});
Referens
Du kan granska källkoden för denna länk på GitHub.