Hoppa till innehållet

Ett API med allt på plats, redo att bygga på.

Ett Express 5-API i TypeScript med ett exempel på en komplett resurs som visar varje mönster: skyddade rutter, validering, svar och fel.

Öppna på GitHubMIT-licens · fri att använda

Använd den när

Du behöver ett fristående API för en webb- eller mobilapp, med inloggade användare, en Postgres-databas och Redis.

Behöver du webbapp och jobb i samma repo? template-monorepo i stället →

Det här ingår

Färdigt från start.

  • Inloggning

    Clerk-middleware, och skyddade rutter med requireAuth() och getAuth().

  • Databas

    Drizzle på Postgres med exempeltabeller och skript för att generera och köra migreringar.

  • Redis

    Begränsning av anrop med glidande fönster och X-RateLimit-rubriker, plus enkla cache-hjälpare.

  • Validering

    Zod-scheman med en validate()-middleware, och rensning av text och filnamn.

  • Svar och fel

    asyncHandler, sendSuccess och sendError, så varje rutt svarar likadant.

  • Exempelresurs

    En skyddad resurs med lista, hämta, skapa och ta bort, och en hälsokontroll.

Kom igång

pnpm install
cp .env.example .env
pnpm db:generate
pnpm db:migrate
pnpm dev          # http://localhost:3001

Struktur

src/
├── index.ts        entry point: middleware, routes, errors
├── middleware/     rate limiting
├── routes/         health.ts, example.ts
├── services/       database, schema, Redis
├── types/          shared types
└── utils/          responses, validation, sanitizing

Miljövariabler

  • DATABASE_URL
  • REDIS_URL
  • CLERK_SECRET_KEY
  • CLERK_PUBLISHABLE_KEY
  • CORS_ORIGINS

Postgres och Redis behövs lokalt. CORS tillåter localhost:3000 om inget annat anges.

Bra att veta

  • Ingen ESLint-konfiguration följer med än, så pnpm lint fungerar först när du lagt till en.

Byggd med

  • Express 5
  • TypeScript
  • Clerk
  • Drizzle
  • PostgreSQL
  • Redis
  • Zod

Låt oss bygga
nästa sak.

Du pratar med mig, inte med en säljare. Första samtalet är gratis.

— Kenny

psst, det tar 15 min

Skriver du svarar jag samma vardag.