Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 661новая вакансия за сутки·92 296вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 192
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 143
  • Облачные технологии14 064
  • QA вакансии3 446
  • Backend вакансии2 095
  • Инженер данных1 792
  • Продакт-менеджер1 233

Разработка

  • Android1 857
  • iOS1 697
  • Fullstack вакансии981
  • AI вакансии949
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 689
  • Java6 529
  • Node.js2 023
  • .NET1 723
  • Kotlin1 596
  • Rust1 462
  • C#710
  • PHP683
  • C++574

DevOps и инфраструктура

  • Kubernetes7 762
  • DevOps вакансии6 052
  • Linux-инфраструктура5 491
  • Terraform / IaC4 268
  • CI/CD3 244
  • Мониторинг и Observability1 789
  • SRE567
  • Кибербезопасность455

Аналитика и данные

  • Data Scientist1 124
  • Бизнес-аналитик917
  • Аналитик данных839
  • Системный аналитик151

Другие направления

  • Проджект-менеджер606
  • UI/UX дизайн142
  • Ручное тестирование14

По регионам

  • Вакансии в США43 473
  • Вакансии в Европе23 552
  • Вакансии в Канаде4 444
  • Работа в России3 901

По формату

  • Удалённые вакансии73 579
  • Релокация в США43 516
  • Гибридная работа12 395
  • Офисная работа7 085

По уровню

  • Senior вакансии42 222
  • Middle вакансии20 589
  • Junior вакансии6 639

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Express.jsВсе вопросы
Express.jsMiddleОпыт

Какие архитектурные решения Express.js задаёт вокруг request lifecycle, middleware, dependency model, validation и error handling?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Express строит весь pipeline на цепочке middleware (req, res, next). Нет встроенного DI, валидации и структуры — всё подключается вручную; порядок регистрации и обработка async-ошибок — зона наибольшего риска.

Request lifecycle в Express

Каждый входящий HTTP-запрос проходит через цепочку middleware функций. Каждая функция получает объекты req, res и коллбэк next. Вызов next() передаёт управление следующему middleware; вызов next(err) — пропускает все обычные middleware и передаёт управление error-обработчику.

// Упрощённая модель жизненного цикла
const app = express();

// 1. Application-level middleware (выполняется для каждого запроса)
app.use((req, res, next) => {
  req.startTime = Date.now();
  next();
});

// 2. Парсинг тела запроса
app.use(express.json({ limit: "1mb" }));

// 3. Router-level middleware
const router = express.Router();
router.use((req, res, next) => {
  if (!req.headers.authorization) {
    return next(new Error("Unauthorized"));
  }
  next();
});

// 4. Route handler
router.get("/items/:id", async (req, res, next) => {
  try {
    const item = await db.find(req.params.id);
    res.json(item);
  } catch (err) {
    next(err);
  }
});

app.use("/api", router);

// 5. Error handler (обязательно 4 параметра)
app.use((err, req, res, next) => {
  const status = err.status ?? 500;
  res.status(status).json({ message: err.message });
});

Middleware как основной строительный блок

Express не разделяет middleware на типы на уровне API — любая функция (req, res, next) является middleware. Порядок регистрации через app.use() и router.use() определяет порядок выполнения. Это даёт гибкость, но требует строгой дисциплины:

  • app.use(path, handler) — монтирует middleware на префикс пути.
  • router.use() — локальный scope для группы маршрутов.
  • Middleware могут быть переиспользованы как npm-пакеты: morgan, helmet, cors, compression.

Dependency model

Express не имеет встроенного DI-контейнера. Зависимости (БД, сервисы) обычно внедряются одним из трёх способов:

  • Closure factories — фабричная функция принимает зависимости и возвращает router.
  • app.locals / req.app.locals — антипаттерн для хранения глобального состояния.
  • Сторонний DI — awilix или tsyringe для продвинутых случаев.
// Рекомендуемый pattern: closure factory
export function createUserRouter(userService) {
  const router = express.Router();
  router.get("/", async (req, res, next) => {
    try {
      res.json(await userService.listAll());
    } catch (err) {
      next(err);
    }
  });
  return router;
}

// В точке сборки приложения:
const userService = new UserService(db);
app.use("/users", createUserRouter(userService));

Валидация

Express не включает валидацию — это ответственность разработчика. Стандартные подходы:

  • Zod — декларативная схема с полным выводом TypeScript-типов.
  • express-validator — цепочки валидации прямо в определении маршрута.
  • Joi — зрелая библиотека с богатым API для сложных схем.

Error handling

Обработчик ошибок — это middleware с четырьмя параметрами, зарегистрированный последним. Важно централизовать его, а не разбрасывать res.status(500) по всем обработчикам.

Подводные камни

  • Async-обработчики без try/catch и без express-async-errors оставят запрос висеть вечно — promise rejection в Express 4 не обрабатывается автоматически.
  • Error middleware распознаётся только по числу аргументов (ровно 4). Если написать (err, req, res) =>, Express воспримет его как обычный middleware.
  • app.use() без пути перехватывает все методы и все пути — случайное размещение ответа до нужного маршрута ломает логику.
  • req.body равен undefined без парсера — забыть express.json() — распространённая ошибка новичков.
  • Хранение состояния в замыканиях router-файлов делает модули синглтонами; это ломается при горячей перезагрузке или тестировании без сброса require-кэша.
  • next() вызванный после res.send() вызывает ошибку «headers already sent» — нужно всегда делать return next() или return res.json().
  • Отсутствие встроенного rate-limiting, CORS и helmet — забыть подключить хотя бы helmet() оставляет сервис уязвимым.
  • Порядок: router.param() выполняется до route handler, это неочевидно и ломает ожидания при отладке.

Частые вопросы на собеседовании

  • В чём разница между app.use() и app.get() / app.post()?
  • Какова роль next() в middleware Express? Что происходит, если его не вызвать?
  • Как работает маршрутизация в Express? Как организовать маршруты с помощью express.Router()?
  • Что такое middleware в Express.js? Объясните цикл запрос-ответ (request-response cycle).

Что портит ответ

  • Знать термины Express.js, но не понимать связи между абстракциями
  • Объяснять поведение через отдельные примеры вместо причинной модели
  • Не связывать mental model с диагностикой ошибок

Что слушает интервьюер

  • Понимает ключевые абстракции Express.js
  • Может предсказывать поведение системы через mental model
  • Связывает модель с debugging и production decisions

Как вы знаете этот вопрос?

Проверить себя по теме Express.js →
←Предыдущий вопросЧто такое параметры маршрутов (route parameters), строки запроса (query strings) и тела запросов (request bodies)? Как получить доступ к каждому?Следующий вопрос→Представьте, endpoint на Express.js иногда отвечает за секунды вместо миллисекунд. Как вы будете искать причину?

Связанные темы

Express.jssystems-thinkingtechnical-communicationtechnology-selectiontrade-off-analysis

Вакансии с этим навыком

  • Fullstack JavaScript разработчик