Hoppa till huvudinnehållet
Version: 10.x

Fristående Adapter

Inofficiell Beta-översättning

Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →

tRPC:s fristående adapter är det enklaste sättet att få ett nytt projekt igång. Den är idealisk för lokal utveckling och serverbaserade produktionsmiljöer. I grunden är det bara ett omslag runt den vanliga Node.js HTTP-servern med standardalternativ relaterade till tRPC.

Om du redan har en befintlig API-distribution som Express, Fastify eller Next.js där du vill integrera tRPC, bör du titta på deras respektive adaptrar. Likaså om du föredrar serverlös hosting eller edge-beräkning har vi adaptrar som AWS Lambda och Fetch som kan passa dina behov.

Det är inte heller ovanligt att ha två ingångspunkter i din applikation när den distribuerade adaptern är svår att köra lokalt. Du kan använda den fristående adaptern för lokal utveckling och en annan adapter när applikationen är publicerad.

Exempelapp​

DescriptionLinks
Standalone tRPC Server
Standalone tRPC Server with CORS handling

Konfigurera en fristående tRPC-server​

1. Implementera din App Router​

Implementera din tRPC-router. Till exempel:

appRouter.ts
ts
import { initTRPC } from '@trpc/server';
import { z } from 'zod';
export const t = initTRPC.create();
export const appRouter = t.router({
getUser: t.procedure.input(z.string()).query((opts) => {
return { id: opts.input, name: 'Bilbo' };
}),
createUser: t.procedure
.input(z.object({ name: z.string().min(5) }))
.mutation(async (opts) => {
// use your ORM of choice
return await UserModel.create({
data: opts.input,
});
}),
});
// export type definition of API
export type AppRouter = typeof appRouter;
appRouter.ts
ts
import { initTRPC } from '@trpc/server';
import { z } from 'zod';
export const t = initTRPC.create();
export const appRouter = t.router({
getUser: t.procedure.input(z.string()).query((opts) => {
return { id: opts.input, name: 'Bilbo' };
}),
createUser: t.procedure
.input(z.object({ name: z.string().min(5) }))
.mutation(async (opts) => {
// use your ORM of choice
return await UserModel.create({
data: opts.input,
});
}),
});
// export type definition of API
export type AppRouter = typeof appRouter;

För mer information kan du titta på snabbstartsguiden

2. Använd den fristående adaptern​

Den fristående adaptern kör en enkel Node.js HTTP-server.

server.ts
ts
import { initTRPC } from '@trpc/server';
import { createHTTPServer } from '@trpc/server/adapters/standalone';
import { appRouter } from './appRouter.ts';
createHTTPServer({
router: appRouter,
createContext() {
console.log('context 3');
return {};
},
}).listen(2022);
server.ts
ts
import { initTRPC } from '@trpc/server';
import { createHTTPServer } from '@trpc/server/adapters/standalone';
import { appRouter } from './appRouter.ts';
createHTTPServer({
router: appRouter,
createContext() {
console.log('context 3');
return {};
},
}).listen(2022);

Hantera CORS & OPTIONS​

Som standard svarar inte den fristående servern på HTTP OPTIONS-förfrågningar eller sätter några CORS-headers.

Om du inte kör i en miljö som hanterar detta åt dig, till exempel under lokal utveckling, kan du behöva hantera det manuellt.

1. Installera cors​

Du kan själv lägga till stöd med det populära cors-paketet

bash
yarn add cors
yarn add -D @types/cors
bash
yarn add cors
yarn add -D @types/cors

För fullständig information om hur du konfigurerar detta paket, kolla dokumentationen

2. Konfigurera den fristående servern​

Det här exemplet öppnar helt enkelt CORS för alla förfrågningar, vilket är användbart under utveckling, men du kan och bör konfigurera det striktare i en produktionsmiljö.

server.ts
ts
import { initTRPC } from '@trpc/server';
import { createHTTPServer } from '@trpc/server/adapters/standalone';
import cors from 'cors';
createHTTPServer({
middleware: cors(),
router: appRouter,
createContext() {
console.log('context 3');
return {};
},
}).listen(3333);
server.ts
ts
import { initTRPC } from '@trpc/server';
import { createHTTPServer } from '@trpc/server/adapters/standalone';
import cors from 'cors';
createHTTPServer({
middleware: cors(),
router: appRouter,
createContext() {
console.log('context 3');
return {};
},
}).listen(3333);

Alternativet middleware accepterar vilken funktion som helst som liknar ett connect/node.js-middleware, så du kan använda det till mer än bara cors-hantering om du vill. Det är dock tänkt som en enkel lösning och kommer därför inte själv att låta dig kombinera flera middlewares. Om du vill göra detta kan du:

  1. Använd en alternativ adapter med mer omfattande middleware-stöd, som Express-adapern

  2. Använd en lösning för att kombinera middlewares som connect

  3. Utöka den fristående createHTTPHandler med en anpassad http-server (se nedan)

Vidareutveckling​

Om createHTTPServer inte räcker till kan du också använda den fristående adapterns funktion createHTTPHandler för att skapa din egen HTTP-server. Till exempel:

server.ts
ts
import { createServer } from 'http';
import { initTRPC } from '@trpc/server';
import { createHTTPHandler } from '@trpc/server/adapters/standalone';
const handler = createHTTPHandler({
router: appRouter,
createContext() {
return {};
},
});
createServer((req, res) => {
/**
* Handle the request however you like,
* just call the tRPC handler when you're ready
*/
handler(req, res);
}).listen(3333);
server.ts
ts
import { createServer } from 'http';
import { initTRPC } from '@trpc/server';
import { createHTTPHandler } from '@trpc/server/adapters/standalone';
const handler = createHTTPHandler({
router: appRouter,
createContext() {
return {};
},
});
createServer((req, res) => {
/**
* Handle the request however you like,
* just call the tRPC handler when you're ready
*/
handler(req, res);
}).listen(3333);