E
Express API
Build a type-safe REST API with Express and TypeScript.
Code
typescript
1import express, { Request, Response, NextFunction } from "express";2 3// Type definitions4interface User {5 id: number;6 name: string;7 email: string;8}9 10interface CreateUserBody {11 name: string;12 email: string;13}14 15// Typed request with body16interface TypedRequest<T> extends Request {17 body: T;18}19 20// In-memory storage21const users: User[] = [22 { id: 1, name: "Alice", email: "alice@example.com" },23 { id: 2, name: "Bob", email: "bob@example.com" },24];25 26// Express app27const app = express();28app.use(express.json());29 30// Error handler middleware31function errorHandler(32 err: Error,33 req: Request,34 res: Response,35 next: NextFunction36): void {37 console.error(err.stack);38 res.status(500).json({ error: err.message });39}40 41// Routes42app.get("/api/users", (req: Request, res: Response) => {43 res.json(users);44});45 46app.get("/api/users/:id", (req: Request, res: Response) => {47 const id = parseInt(req.params.id, 10);48 const user = users.find((u) => u.id === id);49 50 if (!user) {51 res.status(404).json({ error: "User not found" });52 return;53 }54 55 res.json(user);56});57 58app.post(59 "/api/users",60 (req: TypedRequest<CreateUserBody>, res: Response) => {61 const { name, email } = req.body;62 63 if (!name || !email) {64 res.status(400).json({ error: "Name and email are required" });65 return;66 }67 68 const newUser: User = {69 id: users.length + 1,70 name,71 email,72 };73 74 users.push(newUser);75 res.status(201).json(newUser);76 }77);78 79app.delete("/api/users/:id", (req: Request, res: Response) => {80 const id = parseInt(req.params.id, 10);81 const index = users.findIndex((u) => u.id === id);82 83 if (index === -1) {84 res.status(404).json({ error: "User not found" });85 return;86 }87 88 users.splice(index, 1);89 res.status(204).send();90});91 92app.use(errorHandler);93 94const PORT = 3000;95app.listen(PORT, () => {96 console.log(`API server running at http://localhost:${PORT}`);97});Run this example locally
$ npx ts-node backend/express-api.ts