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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

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

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

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

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 686
  • Вакансии в Европе23 668
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 889
  • Релокация в США43 686
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

Как @fastify/sensible улучшает опыт разработчика?

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

@fastify/sensible добавляет в reply методы-хелперы для HTTP-ошибок (reply.notFound(), reply.badRequest() и др.) и декораторы httpErrors, assert, to, делая код обработчиков короче и читаемее.

Установка и регистрация

import Fastify from 'fastify';
import sensible from '@fastify/sensible';

const app = Fastify({ logger: true });

await app.register(sensible);

@fastify/sensible — набор полезных дополнений для Fastify

@fastify/sensible — официальный плагин, который добавляет к Fastify-приложению коллекцию небольших, но часто нужных улучшений. Он не меняет архитектуру приложения, а заполняет «пробелы», с которыми сталкиваются разработчики каждый день: стандартные HTTP-ошибки, безопасная обработка async-операций, удобные шорткаты для ответов.

HTTP-ошибки через reply

После регистрации плагина на объект reply добавляются методы для всех стандартных HTTP-ошибок. Они автоматически устанавливают статус-код и возвращают объект ошибки в формате, совместимом с http-errors:

app.get('/users/:id', async (request, reply) => {
  const user = await db.findById(request.params.id);

  if (!user) {
    // Вместо: return reply.code(404).send({ message: 'Not Found' })
    return reply.notFound(`User ${request.params.id} not found`);
  }

  if (!request.user.canRead(user)) {
    return reply.forbidden('Access denied');
  }

  return user;
});

Полный список методов ошибок

reply.badRequest('Invalid input');          // 400
reply.unauthorized('Login required');       // 401
reply.paymentRequired();                    // 402
reply.forbidden('No access');               // 403
reply.notFound('Resource missing');         // 404
reply.methodNotAllowed();                   // 405
reply.notAcceptable();                      // 406
reply.conflict('Duplicate entry');          // 409
reply.gone();                               // 410
reply.unprocessableEntity('Bad data');      // 422
reply.tooManyRequests('Slow down');         // 429
reply.internalServerError('Oops');          // 500
reply.notImplemented();                     // 501
reply.badGateway();                         // 502
reply.serviceUnavailable('Maintenance');    // 503
reply.gatewayTimeout();                     // 504

httpErrors — создание ошибок вне обработчика

Декоратор app.httpErrors позволяет создавать объекты ошибок в middleware, сервисном слое или хуках, где reply недоступен:

// Сервисный слой
async function getUserOrThrow(id) {
  const user = await db.findById(id);
  if (!user) {
    throw app.httpErrors.notFound(`User ${id} not found`);
  }
  return user;
}

// Обработчик просто вызывает сервис — ошибка всплывает автоматически
app.get('/users/:id', async (request) => {
  return getUserOrThrow(request.params.id);
});

Утилита assert

app.assert(condition, statusCode, message) — компактный способ выбросить HTTP-ошибку при нарушении инварианта:

app.post('/transfer', async (request) => {
  const { amount, toId } = request.body;

  app.assert(amount > 0, 400, 'Amount must be positive');
  app.assert(amount <= 10_000, 422, 'Amount exceeds limit');

  const sender = await getUser(request.user.id);
  app.assert(sender.balance >= amount, 409, 'Insufficient funds');

  return transfer(sender, toId, amount);
});

Утилита to — безопасный await

app.to(promise) оборачивает Promise в стиле Go-like error handling, возвращая [error, data]:

app.get('/profile', async (request, reply) => {
  const [err, user] = await app.to(fetchUser(request.user.id));

  if (err) {
    request.log.error(err, 'Failed to fetch user');
    return reply.internalServerError('Could not load profile');
  }

  return user;
});

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

  • Инкапсуляция плагина: если @fastify/sensible зарегистрирован внутри дочернего контекста без fastify-plugin, методы reply.notFound() будут доступны только в этом контексте. Регистрируйте его на уровне корневого приложения или используйте fp().
  • Конфликт с setErrorHandler: если вы определили кастомный setErrorHandler, убедитесь, что он корректно обрабатывает объекты ошибок из http-errors (у них есть поля statusCode и status).
  • app.to не логирует ошибки: to() просто возвращает ошибку, не бросая её. Если забыть проверить err, ошибка будет молча проглочена.
  • assert бросает исключение: в отличие от библиотеки assert из Node.js, app.assert создаёт HTTP-ошибку, а не AssertionError. Не используйте её для unit-тестов — только для бизнес-инвариантов.
  • Сообщения ошибок попадают к клиенту: строки, переданные в reply.forbidden('секретная причина'), будут видны в ответе. Не передавайте внутренние детали (имена таблиц, стек и т.д.).

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

  • Что такое Fastify и каковы его основные преимущества перед Express.js?
  • Как работает система плагинов (plugin system) в Fastify? Что такое fastify-plugin и почему он нужен для инкапсуляции scope?
  • Что такое schema-based validation в Fastify и как используется JSON Schema?
  • Что такое lifecycle в Fastify? Перечислите основные hooks по порядку.

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

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

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

  • Может объяснить @fastify/sensible на примере кода.
  • Называет ключевые API: httpErrors, assert.
  • Использует точные API Fastify, а не вымышленные hooks/decorators/methods.
  • Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.

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

Проверить себя по теме Fastify →

Источники

  • https://github.com/fastify/fastify-sensible#readme
  • https://fastify.dev/docs/latest/Reference/Errors/

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

Fastifyapi-designerror-handling