Fristående Adapter
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
| Description | Links |
|---|---|
| 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.tstsimport { 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 choicereturn await UserModel.create({data: opts.input,});}),});// export type definition of APIexport type AppRouter = typeof appRouter;
appRouter.tstsimport { 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 choicereturn await UserModel.create({data: opts.input,});}),});// export type definition of APIexport 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.tstsimport { 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.tstsimport { 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
bashyarn add corsyarn add -D @types/cors
bashyarn add corsyarn 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.tstsimport { 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.tstsimport { 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:
-
Använd en alternativ adapter med mer omfattande middleware-stöd, som Express-adapern
-
Använd en lösning för att kombinera middlewares som connect
-
Utöka den fristående
createHTTPHandlermed 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.tstsimport { 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.tstsimport { 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);