0Pricing
TypeScript Academy · Урок

Типизированное промежуточное ПО и обработчики ошибок

Пишите безопасные с точки зрения типов функции промежуточного ПО Express

«Типизированное промежуточное ПО и обработчики ошибок» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

Типобезопасное промежуточное ПО Express и обработчики ошибок предотвращают распространённые ошибки в конвейерах обработки запросов.

Сигнатура промежуточного ПО

Функция промежуточного ПО принимает req, res и next. Используйте тип RequestHandler из express.
import { RequestHandler } from 'express';
const authMiddleware: RequestHandler = (req, res, next) => {
  if (!req.headers.authorization) return res.status(401).json({});
  next();
};

NextFunction

Импортируйте NextFunction, чтобы явно типизировать третий параметр.
import { Request, Response, NextFunction } from 'express';
function logger(req: Request, res: Response, next: NextFunction): void {
  console.log(req.method, req.path);
  next();
}

Сигнатура обработчика ошибок

Обработчикам ошибок требуются четыре параметра. TypeScript обеспечивает это с помощью типа ErrorRequestHandler.
import { ErrorRequestHandler } from 'express';
const errorHandler: ErrorRequestHandler = (err, req, res, next) => {
  res.status(err.status ?? 500).json({ message: err.message });
};

Пользовательский класс ошибки

Определите типизированный класс ошибки с кодом состояния.
class AppError extends Error {
  constructor(public message: string, public status: number = 500) {
    super(message);
  }
}

Обёртка для асинхронного промежуточного ПО

Оберните асинхронное промежуточное ПО, чтобы передавать ошибки обработчику ошибок Express.
function asyncHandler(fn: RequestHandler): RequestHandler {
  return (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next);
}

Промежуточное ПО аутентификации с добавлением пользователя

Добавляйте аутентифицированного пользователя в запрос после проверки токена.
const authenticate: RequestHandler = async (req, res, next) => {
  const user = await verifyToken(req.headers.authorization);
  req.user = user; // requires module augmentation
  next();
};

Промежуточное ПО валидации с Zod

Используйте Zod в промежуточном ПО, чтобы анализировать тела запросов и уточнять их типы.
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();
  };
}

Промежуточное ПО на уровне маршрутизатора

Применяйте типизированное промежуточное ПО к определённым маршрутам.
router.use('/admin', authenticate, authorize('admin'));
router.get('/admin/users', asyncHandler(listUsers));

Промежуточное ПО для журналирования

Типизированное промежуточное ПО для журналирования запросов.
const requestLogger: RequestHandler = (req, _res, next) => {
  console.log(`${req.method} ${req.path}`);
  next();
};

Регистрация глобального обработчика ошибок

Зарегистрируйте обработчик ошибок как последнее промежуточное ПО в цепочке.
app.use(requestLogger);
app.use('/api', apiRouter);
app.use(errorHandler); // must be last

Быстрая проверка

Сколько параметров у обработчика ошибок Express?

Итоги

Используйте типы RequestHandler, ErrorRequestHandler и NextFunction для промежуточного ПО Express. Оборачивайте асинхронные обработчики, чтобы передавать ошибки дальше. Используйте Zod в промежуточном ПО для типизированной проверки тела запроса.

Часто задаваемые вопросы

Урок «Типизированное промежуточное ПО и обработчики ошибок» бесплатный?

Да — полный текст урока «Типизированное промежуточное ПО и обработчики ошибок» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Типизированное промежуточное ПО и обработчики ошибок»?

Пишите безопасные с точки зрения типов функции промежуточного ПО Express Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Типизированное промежуточное ПО и обработчики ошибок»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Настройка TypeScript с Node.js
  2. Типизация запросов и ответов Express
  3. Типизированное промежуточное ПО и обработчики ошибок
  4. Переменные окружения и типизация конфигурации
← Назад к TypeScript Academy