TypeScript Academy · Lekcja

Typowane middleware i moduły obsługi błędów

Pisz bezpieczne typowo funkcje middleware dla Express.

Lekcja 3 z 413 kroki

Typowane middleware i moduły obsługi błędów to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Wprowadzenie

Middleware i obsługa błędów Express z kontrolą typów zapobiegają typowym błędom w potokach obsługi żądań.

Sygnatura middleware

Funkcja middleware przyjmuje req, res i next. Należy używać typu RequestHandler z express.
import { RequestHandler } from 'express';
const authMiddleware: RequestHandler = (req, res, next) => {
  if (!req.headers.authorization) return res.status(401).json({});
  next();
};

NextFunction

Należy zaimportować NextFunction, aby jawnie typować trzeci parametr.
import { Request, Response, NextFunction } from 'express';
function logger(req: Request, res: Response, next: NextFunction): void {
  console.log(req.method, req.path);
  next();
}

Sygnatura obsługi błędów

Obsługa błędów wymaga czterech parametrów. TypeScript wymusza to za pomocą typu ErrorRequestHandler.
import { ErrorRequestHandler } from 'express';
const errorHandler: ErrorRequestHandler = (err, req, res, next) => {
  res.status(err.status ?? 500).json({ message: err.message });
};

Niestandardowa klasa błędu

Należy zdefiniować typowaną klasę błędu z kodem statusu.
class AppError extends Error {
  constructor(public message: string, public status: number = 500) {
    super(message);
  }
}

Wrapper asynchronicznego middleware

Należy opakować asynchroniczne middleware, aby przekazywać błędy do obsługi błędów Express.
function asyncHandler(fn: RequestHandler): RequestHandler {
  return (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next);
}

Middleware uwierzytelniania z dołączaniem użytkownika

Po zweryfikowaniu tokenu należy dołączyć uwierzytelnionego użytkownika do żądania.
const authenticate: RequestHandler = async (req, res, next) => {
  const user = await verifyToken(req.headers.authorization);
  req.user = user; // requires module augmentation
  next();
};

Middleware walidacyjne z Zod

Należy używać Zod w middleware do analizowania body żądania i zawężania jego typu.
function validate<T>(schema: ZodSchema<T>): RequestHandler {
  return (req, res, next) => {
    const result = schema.safeParse(req.body);
    if (!result.success) return res.status(400).json(result.error);
    req.body = result.data;
    next();
  };
}

Middleware na poziomie routera

Należy stosować typowane middleware do określonych tras.
router.use('/admin', authenticate, authorize('admin'));
router.get('/admin/users', asyncHandler(listUsers));

Middleware rejestrowania

Typowane middleware do rejestrowania żądań.
const requestLogger: RequestHandler = (req, _res, next) => {
  console.log(`${req.method} ${req.path}`);
  next();
};

Rejestrowanie globalnej obsługi błędów

Należy zarejestrować obsługę błędów jako ostatnie middleware w łańcuchu.
app.use(requestLogger);
app.use('/api', apiRouter);
app.use(errorHandler); // must be last

Szybki sprawdzian

Ile parametrów ma obsługa błędów Express?

Podsumowanie

Należy używać typów RequestHandler, ErrorRequestHandler i NextFunction dla middleware Express. Należy opakowywać asynchroniczne handlery, aby przekazywać błędy. Należy używać Zod w middleware do typowanej walidacji body żądania.
Bezpłatny start

Ucz się TypeScript dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
101
Lekcje
352

Często zadawane pytania

Czy lekcja „Typowane middleware i moduły obsługi błędów” jest bezpłatna?

Tak — pełny tekst „Typowane middleware i moduły obsługi błędów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Typowane middleware i moduły obsługi błędów”?

Pisz bezpieczne typowo funkcje middleware dla Express. Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?

Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Typowane middleware i moduły obsługi błędów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?

Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfigurowanie TypeScript z Node.js
  2. Typowanie żądań i odpowiedzi Express
  3. Typowane middleware i moduły obsługi błędów
  4. Zmienne środowiskowe i typowanie konfiguracji
← Powrót do TypeScript Academy