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

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C++273
  • C#210

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

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD919
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

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

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

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

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

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

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

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Как работает маршрутизация в Express? Как организовать маршруты с помощью express.Router()?

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

Express сопоставляет метод+путь с обработчиками в порядке регистрации. express.Router() создаёт модульный мини-роутер, который монтируется на app.use('/prefix', router) для разбиения маршрутов по файлам.

Базовая маршрутизация

import express from 'express';
const app = express();

app.use(express.json());

// HTTP-методы: get, post, put, patch, delete
app.get('/jobs', (req, res) => res.json({ jobs: [] }));
app.post('/jobs', (req, res) => res.status(201).json({ created: true }));
app.put('/jobs/:id', (req, res) => res.json({ id: req.params.id }));
app.delete('/jobs/:id', (req, res) => res.status(204).end());

// app.all — совпадает с любым методом
app.all('/ping', (req, res) => res.send('pong'));

app.listen(3000);

Маршрутизация в Express.js

Маршрутизация определяет, какой обработчик вызывается для конкретной комбинации HTTP-метода и пути. Express ищет первое совпадение сверху вниз по порядку регистрации маршрутов.

express.Router() — модульная маршрутизация

express.Router() создаёт мини-приложение с собственным стеком middleware и маршрутов. Это позволяет разбить маршруты по ресурсам, файлам и командам, а затем смонтировать их на основное приложение.

// routes/jobs.js
import { Router } from 'express';
import { authenticate } from '../middleware/auth.js';
import { JobController } from '../controllers/job.controller.js';

const router = Router();

// Middleware только для этого роутера
router.use((req, res, next) => {
  console.log('Jobs router hit:', req.method, req.path);
  next();
});

// Маршруты
router.get('/', JobController.list);
router.get('/:id', JobController.detail);
router.post('/', authenticate, JobController.create);
router.put('/:id', authenticate, JobController.update);
router.delete('/:id', authenticate, JobController.remove);

export default router;
// routes/users.js
import { Router } from 'express';
const router = Router();

router.get('/profile', (req, res) => res.json({ user: req.user }));
router.put('/profile', (req, res) => res.json({ updated: true }));

export default router;
// app.js
import express from 'express';
import jobsRouter from './routes/jobs.js';
import usersRouter from './routes/users.js';

const app = express();
app.use(express.json());

// Монтирование роутеров
app.use('/api/jobs', jobsRouter);   // /api/jobs/... -> jobsRouter
app.use('/api/users', usersRouter); // /api/users/... -> usersRouter

// 404 handler — регистрируется ПОСЛЕ всех роутеров
app.use((req, res) => {
  res.status(404).json({ error: `Route ${req.method} ${req.path} not found` });
});

// Error handler
app.use((err, req, res, next) => {
  res.status(err.status || 500).json({ error: err.message });
});

app.listen(3000);

Цепочки обработчиков и router.route()

// router.route() объединяет обработчики одного пути
router
  .route('/jobs/:id')
  .get(JobController.detail)
  .put(authenticate, JobController.update)
  .delete(authenticate, JobController.remove);

Вложенные роутеры

const apiRouter = Router();
apiRouter.use('/jobs', jobsRouter);
apiRouter.use('/users', usersRouter);

app.use('/api/v1', apiRouter); // /api/v1/jobs, /api/v1/users

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

  • Порядок маршрутов критичен — /jobs/new должен быть зарегистрирован до /jobs/:id, иначе строка 'new' будет интерпретирована как значение параметра.
  • 404 обработчик до error handler — 404-middleware регистрируется после всех роутов, но до обработчика ошибок (с 4 параметрами).
  • mergeParams: false по умолчанию — если дочерний роутер монтируется на путь с параметром (/users/:userId/posts), параметр userId не виден в req.params без Router({ mergeParams: true }).
  • Один экземпляр Router — одно монтирование — монтирование одного экземпляра Router на два пути приводит к неожиданному поведению; создавайте отдельные экземпляры.
  • app.use('/path', fn) vs app.get('/path', fn) — app.use('/path') совпадает с любым методом и с любым подпутём (/path/anything), тогда как app.get('/path') — только с GET и точным совпадением.
  • Дублирование префикса — при монтировании app.use('/api/jobs', router) внутри роутера пишите просто / и /:id, а не /api/jobs и /api/jobs/:id.

Типичные ошибки

  • Дает общий ответ про Node.js и не называет конкретные API Express.js.
  • Не объясняет, где в lifecycle находится организация маршрутов через express.Router.
  • Не разделяет validation, authorization, business logic и persistence.
  • Игнорирует ошибки, лимиты входных данных, observability и тестирование.

Что проверяет интервьюер

  • Может объяснить организация маршрутов через express.Router на примере кода.
  • Называет ключевые API: express.Router().
  • Использует точные API Express.js, а не вымышленные hooks/decorators/methods.
  • Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.

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

Проверить себя по теме Express.js →

Источники

  • https://expressjs.com/en/guide/routing.html
  • https://expressjs.com/en/5x/api.html
←Предыдущий вопросКакова роль `next()` в middleware Express? Что происходит, если его не вызвать?Следующий вопрос→Что такое middleware в Express.js? Объясните цикл запрос-ответ (request-response cycle).

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

Express.jsapi-designmodule-organization

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

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