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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python15 655
  • Облачные технологии11 901
  • QA вакансии3 405
  • Backend вакансии1 917
  • Инженер данных1 435
  • Продакт-менеджер891

Разработка

  • Android1 772
  • iOS1 646
  • AI вакансии901
  • Fullstack вакансии801
  • Frontend вакансии678
  • Mobile вакансии33

По стеку

  • Go8 449
  • Java5 599
  • Node.js1 779
  • Kotlin1 475
  • Rust1 398
  • .NET1 370
  • PHP574
  • C#436
  • C++424

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

  • Kubernetes6 670
  • DevOps вакансии5 099
  • Linux-инфраструктура4 926
  • Terraform / IaC3 701
  • CI/CD1 889
  • Мониторинг и Observability1 699
  • SRE516
  • Кибербезопасность262

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

  • Data Scientist797
  • Аналитик данных764
  • Бизнес-аналитик738
  • Системный аналитик96

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

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

По регионам

  • Вакансии в США41 869
  • Вакансии в Европе17 422
  • Вакансии в Канаде4 056
  • Работа в России3 874

По формату

  • Удалённые вакансии67 491
  • Релокация в США42 199
  • Гибридная работа9 848
  • Офисная работа6 812

По уровню

  • Senior вакансии38 497
  • Middle вакансии18 722
  • Junior вакансии6 245

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

Все компании
  • Wise193 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

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

Как Nuxt реализует серверные API-маршруты через директорию server/api/?

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

Файлы в server/api/ автоматически становятся HTTP-эндпоинтами. Суффикс в имени файла задаёт метод (.get.ts, .post.ts). Обработчики создаются через defineEventHandler(), а h3-утилиты (readBody, getQuery, setCookie) авто-импортируются.

Соглашения об именовании файлов

server/
├── api/
│   ├── hello.ts            # GET/POST/... /api/hello
│   ├── users.get.ts        # GET /api/users
│   ├── users.post.ts       # POST /api/users
│   ├── users/
│   │   └── [id].get.ts     # GET /api/users/:id
│   └── [...path].ts        # Catch-all: /api/*
├── routes/
│   └── sitemap.xml.get.ts  # GET /sitemap.xml
└── middleware/
    └── auth.ts             # Глобальный middleware для всех запросов

Серверные API-маршруты в Nuxt 3

Nuxt 3 через движок Nitro предоставляет файловый роутинг для серверных обработчиков. Файлы в директории server/api/ автоматически становятся HTTP-эндпоинтами по пути /api/.... Файлы в server/routes/ маппятся на произвольные пути без префикса /api.

Базовый обработчик

// server/api/users.get.ts
export default defineEventHandler(async (event) => {
  // Все утилиты авто-импортированы из h3
  const query = getQuery(event)          // ?page=1&limit=10
  const headers = getHeaders(event)      // все заголовки запроса

  // Возвращаем данные — Nitro автоматически сериализует в JSON
  return [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
  ]
})

POST с телом запроса

// server/api/users.post.ts
import { z } from 'zod'

const CreateUserSchema = z.object({
  name: z.string().min(1),
  email: z.string().email(),
})

export default defineEventHandler(async (event) => {
  const body = await readBody(event)
  const parsed = CreateUserSchema.safeParse(body)

  if (!parsed.success) {
    throw createError({
      statusCode: 422,
      statusMessage: 'Validation failed',
      data: parsed.error.flatten(),
    })
  }

  // Сохраняем пользователя...
  return { id: 123, ...parsed.data }
})

Динамические параметры маршрута

// server/api/users/[id].get.ts
export default defineEventHandler(async (event) => {
  const id = getRouterParam(event, 'id')  // строка
  const numericId = Number(id)

  if (isNaN(numericId)) {
    throw createError({ statusCode: 400, statusMessage: 'Invalid ID' })
  }

  // Имитация запроса к БД
  const user = await db.findUser(numericId)

  if (!user) {
    throw createError({ statusCode: 404, statusMessage: 'User not found' })
  }

  return user
})

Серверный middleware

// server/middleware/auth.ts
// Выполняется ПЕРЕД всеми обработчиками
export default defineEventHandler(async (event) => {
  // Пропускаем публичные маршруты
  if (event.path.startsWith('/api/public')) return

  const token = getCookie(event, 'auth_token')
    ?? getHeader(event, 'authorization')?.replace('Bearer ', '')

  if (!token) {
    throw createError({ statusCode: 401, statusMessage: 'Unauthorized' })
  }

  // Сохраняем данные пользователя в контексте события
  event.context.user = await verifyToken(token)
})

Работа с cookies и заголовками ответа

// server/api/auth/login.post.ts
export default defineEventHandler(async (event) => {
  const { email, password } = await readBody(event)
  const user = await authenticateUser(email, password)

  if (!user) {
    throw createError({ statusCode: 401, statusMessage: 'Invalid credentials' })
  }

  const token = generateJWT(user)

  // Устанавливаем cookie
  setCookie(event, 'auth_token', token, {
    httpOnly: true,
    secure: process.env.NODE_ENV === 'production',
    sameSite: 'lax',
    maxAge: 60 * 60 * 24 * 7, // 7 дней
  })

  // Добавляем заголовок ответа
  setResponseHeader(event, 'X-Auth-User', user.id.toString())

  return { ok: true, user: { id: user.id, email: user.email } }
})

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

  • Нет доступа к Vue/Nuxt composables — в server/ недоступны useRuntimeConfig(event) нужно передавать event; useState, useFetch и другие Nuxt composables недоступны — только хелперы h3 и Nitro.
  • Порядок middleware не гарантирован — несколько файлов в server/middleware/ выполняются в алфавитном порядке; используйте числовые префиксы для явного управления порядком.
  • readBody() нельзя вызвать дважды — тело запроса читается один раз; если middleware уже прочитал body, обработчик получит пустой объект; передавайте данные через event.context.
  • Отсутствие типизации event.context — данные в event.context (например, user) не типизированы по умолчанию; нужно расширять интерфейс через declare module 'h3'.
  • CORS нужно настраивать явно — Nuxt не добавляет CORS-заголовки по умолчанию; для публичных API используйте routeRules с cors: true или обработку в middleware.
  • Catch-all маршруты перехватывают всё — файл [...path].ts в server/api/ будет вызван для любого пути, включая несуществующие; не забывайте возвращать 404 для неизвестных путей.

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

  • В чём разница между composable'ами useAsyncData и useFetch?
  • Что такое useState() в Nuxt и чем он отличается от Vue ref()?
  • Что такое серверный движок Nitro в Nuxt 3 и что он обеспечивает?
  • Что такое Nuxt и какие проблемы он решает по сравнению с обычным Vue.js-приложением?

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

  • Путать server API routes с похожим API из соседнего фреймворка.
  • Не объяснять, где код выполняется: сервер, клиент, build step или runtime.
  • Игнорировать влияние на hydration, cache, bundle size или безопасность.

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

  • Точно объясняет назначение механизма «server API routes».
  • Показывает корректный минимальный пример без выдуманных API.
  • Называет ограничения, failure modes и production-компромиссы.

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

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

Источники

  • https://nuxt.com/docs/3.x/guide/directory-structure/server
  • https://nuxt.com/docs/3.x/guide/concepts/server-engine
←Предыдущий вопросКакие режимы рендеринга существуют в Nuxt 3: SSR, SSG, SPA, ISR и гибридный режим?Следующий вопрос→В каких типах frontend-проектов Nuxt даёт реальный выигрыш, а где будет избыточен или неудачен?

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

Nuxtapi-designvalidation