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 {createTRPCClient ,httpBatchLink } from '@trpc/client';import type {AppRouter } from './server';constclient =createTRPCClient <AppRouter >({links : [httpBatchLink ({url : 'http://localhost:3000',// transformer,}),],});
client/index.tstsimport {createTRPCClient ,httpBatchLink } from '@trpc/client';import type {AppRouter } from './server';constclient =createTRPCClient <AppRouter >({links : [httpBatchLink ({url : 'http://localhost:3000',// transformer,}),],});
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:
tsconstsomePosts = awaitPromise .all ([trpc .post .byId .query (1),trpc .post .byId .query (2),trpc .post .byId .query (3),]);
tsconstsomePosts = awaitPromise .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 interfaceHTTPBatchLinkOptions extendsHTTPLinkOptions {/*** Maximum length of HTTP URL allowed before operations are split into multiple requests* @default Infinity*/maxURLLength ?: number;/*** Maximum number of operations allowed in a single batch request* @default Infinity*/maxItems ?: number;}export interfaceHTTPLinkOptions {url : string |URL ;/*** Add ponyfill for fetch*/fetch ?: typeoffetch ;/*** Data transformer* @see https://trpc.io/docs/server/data-transformers**/transformer ?:DataTransformerOptions ;/*** Headers to be set on outgoing requests or a callback that of said headers* @see https://trpc.io/docs/client/headers*/headers ?:|HTTPHeaders | ((opts : {opList :NonEmptyArray <Operation > }) =>HTTPHeaders |Promise <HTTPHeaders >);}
tsexport interfaceHTTPBatchLinkOptions extendsHTTPLinkOptions {/*** Maximum length of HTTP URL allowed before operations are split into multiple requests* @default Infinity*/maxURLLength ?: number;/*** Maximum number of operations allowed in a single batch request* @default Infinity*/maxItems ?: number;}export interfaceHTTPLinkOptions {url : string |URL ;/*** Add ponyfill for fetch*/fetch ?: typeoffetch ;/*** Data transformer* @see https://trpc.io/docs/server/data-transformers**/transformer ?:DataTransformerOptions ;/*** Headers to be set on outgoing requests or a callback that of said headers* @see https://trpc.io/docs/client/headers*/headers ?:|HTTPHeaders | ((opts : {opList :NonEmptyArray <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 {createTRPCClient ,httpBatchLink } from '@trpc/client';import type {AppRouter } from './server';constclient =createTRPCClient <AppRouter >({links : [httpBatchLink ({url : 'http://localhost:3000',maxURLLength : 2083, // a suitable size// alternatively, you can make all RPC-calls to be called with POST// methodOverride: 'POST',}),],});
client/index.tstsimport {createTRPCClient ,httpBatchLink } from '@trpc/client';import type {AppRouter } from './server';constclient =createTRPCClient <AppRouter >({links : [httpBatchLink ({url : 'http://localhost:3000',maxURLLength : 2083, // a suitable size// alternatively, you can make all RPC-calls to be called with POST// methodOverride: 'POST',}),],});
Begränsa batchstorlek
1. Ställ in maximal batchstorlek på servern:
maxBatchSize begränsar hur många operationer som får skickas i en enskild batchförfrågan. Förfrågningar som överskrider denna gräns avvisas med ett 400 Bad Request-fel. Denna inställning kan skickas till vilken tRPC-adapter som helst.
server.tstsimport { createHTTPServer } from '@trpc/server/adapters/standalone';createHTTPServer({maxBatchSize: 10,});
server.tstsimport { createHTTPServer } from '@trpc/server/adapters/standalone';createHTTPServer({maxBatchSize: 10,});
eller till exempel om du använder Next.js:
pages/api/trpc/[trpc].tstsexport default trpcNext.createNextApiHandler({maxBatchSize: 10,});
pages/api/trpc/[trpc].tstsexport default trpcNext.createNextApiHandler({maxBatchSize: 10,});
2. Ställ in matchande gräns på klienten:
Använd alternativet maxItems på din batch-länk för att säkerställa att klienten inte överskrider serverns gräns. Detta delar automatiskt upp stora batchar i flera HTTP-förfrågningar.
client/index.tstsimport { createTRPCClient, httpBatchLink } from '@trpc/client';import type { AppRouter } from '../server';const client = createTRPCClient<AppRouter>({links: [httpBatchLink({url: 'http://localhost:3000',// 👇 should be the same or lower than the server's maxBatchSizemaxItems: 10,}),],});
client/index.tstsimport { createTRPCClient, httpBatchLink } from '@trpc/client';import type { AppRouter } from '../server';const client = createTRPCClient<AppRouter>({links: [httpBatchLink({url: 'http://localhost:3000',// 👇 should be the same or lower than the server's maxBatchSizemaxItems: 10,}),],});
Inaktivera batchhantering
1. Inaktivera batching på din server:
server.tstsimport {createHTTPServer } from '@trpc/server/adapters/standalone';import {appRouter } from './router';createHTTPServer ({router :appRouter ,// 👇 disable batchingallowBatching : false,});
server.tstsimport {createHTTPServer } from '@trpc/server/adapters/standalone';import {appRouter } from './router';createHTTPServer ({router :appRouter ,// 👇 disable batchingallowBatching : false,});
eller, om du använder Next.js:
pages/api/trpc/[trpc].tstsimport {createNextApiHandler } from '@trpc/server/adapters/next';import {appRouter } from '../../../router';export defaultcreateNextApiHandler ({router :appRouter ,// 👇 disable batchingallowBatching : false,});
pages/api/trpc/[trpc].tstsimport {createNextApiHandler } from '@trpc/server/adapters/next';import {appRouter } from '../../../router';export defaultcreateNextApiHandler ({router :appRouter ,// 👇 disable batchingallowBatching : false,});
2. Ersätt httpBatchLink med httpLink i din tRPC-klient
client/index.tstsimport {createTRPCClient ,httpLink } from '@trpc/client';import type {AppRouter } from './server';constclient =createTRPCClient <AppRouter >({links : [httpLink ({url : 'http://localhost:3000',}),],});
client/index.tstsimport {createTRPCClient ,httpLink } from '@trpc/client';import type {AppRouter } from './server';constclient =createTRPCClient <AppRouter >({links : [httpLink ({url : 'http://localhost:3000',}),],});
eller, om du använder Next.js:
utils/trpc.tstsximport type {AppRouter } from '../server';import {httpLink } from '@trpc/client';import {createTRPCNext } from '@trpc/next';export consttrpc =createTRPCNext <AppRouter >({config () {return {links : [httpLink ({url : '/api/trpc',}),],};},});
utils/trpc.tstsximport type {AppRouter } from '../server';import {httpLink } from '@trpc/client';import {createTRPCNext } from '@trpc/next';export consttrpc =createTRPCNext <AppRouter >({config () {return {links : [httpLink ({url : '/api/trpc',}),],};},});