Как с помощью DevTools определить, где находится ошибка: на клиенте или сервере?

Ответ

DevTools (вкладки Network и Console) — ключевой инструмент для локализации источника ошибки.

Признаки серверной ошибки (Backend):

  • Вкладка Network: Запросы возвращают статус 5xx (500, 502, 503) или 4xx (например, 401, 403, 404, если сервер их генерирует).
  • Вкладка Console: Ошибки, связанные с CORS, или сообщения о неудачных запросах к API.
  • Ответ сервера: В теле ответа (Preview/Response) может быть стектрейс или сообщение об ошибке от бэкенда (например, от Django или Spring).

Признаки клиентской ошибки (Frontend):

  • Вкладка Console: JavaScript-ошибки (TypeError, ReferenceError, Uncaught Promise rejection).
  • Вкладка Sources: Можно поставить точку останова (breakpoint) и отладить выполнение скрипта.
  • Вкладка Elements: Неправильно применённые стили или некорректная структура DOM.

Практическая проверка:

  1. Откройте вкладку Network и найдите проблемный запрос.
  2. Проверьте его Status и Response.
  3. Если статус 5xx или в ответе ошибка сервера — проблема на бэкенде.
  4. Если статус 200/OK, но данные не отображаются или ломают интерфейс — проблема в клиентском коде, который эти данные обрабатывает.

Быстрый тест из Console:

// Выполните запрос вручную, чтобы изолировать проблему
fetch('/api/endpoint')
  .then(response => {
    console.log('Статус:', response.status); // Проверяем статус
    return response.json();
  })
  .then(data => console.log('Данные с сервера:', data)) // Проверяем данные
  .catch(error => console.error('Ошибка сети/парсинга:', error));

Если этот запрос завершается с ошибкой или возвращает некорректные данные — проблема на стороне сервера или сети. Если данные валидны, но интерфейс их не показывает — ищите ошибку в клиентском JavaScript.

Ответ 18+ 🔞

А, ну ты глянь, опять этот вечный спор — кто накосячил, фронтенд или бэкенд? Слушай, тут всё просто, как три копейки, если знать, куда смотреть. DevTools — это наш главный детектив, а вкладки Network и Console — его прямые улики, блядь.

Если косячит сервер (Backend, ёпта):

  • Вкладка Network: Тут, сука, как на ладони. Смотришь на статусы запросов. Увидел 5xx (500, 502, 503) — всё, пиздец, сервер лёг. Или 4xx (типа 401, 403, 404), но только если это сервер такой злобный и отказывает, а не ты криво ссылку накодил.
  • Вкладка Console: Могут вылезти ошибки про CORS — это тоже серверная засада, он не пускает. Или сообщения, что запрос к API обосрался.
  • Ответ сервера: Тыкни на запрос, открой Preview/Response. Если там какая-то дичь, стектрейс от Django или Spring, или сообщение «всё пропало, шеф» — ну, поздравляю, бэкендеры опять что-то наворотили.

Если косячит клиент (Frontend, наш брат-распиздяй):

  • Вкладка Console: Вот тут наш дом родной. JavaScript-ошибки во всей красе: TypeError, ReferenceError, Uncaught Promise rejection — это прям наш автограф, наша визитная карточка, блядь.
  • Вкладка Sources: Поставил точку останова (breakpoint) и пошёл дебажить, как заправский хирург. Смотри, где скрипт спотыкается.
  • Вкладка Elements: А тут стили поехали или DOM-дерево кривое, как у пьяного столяра собрано.

Практика, мать её:

  1. Открываешь Network, обновляешь страницу и ищешь тот самый подозрительный запрос, который всё ломает.
  2. Смотришь его Status. Потом тыкаешь в него и смотришь Response.
  3. Если статус 5xx или в ответе серверная ошибка — всё ясно, иди пинай бэкендеров. Проблема на их стороне.
  4. А если статус 200/OK, данные вроде пришли, но на странице нихуя не отображается или всё разъехалось — значит, твой фронтенд-код эти данные переварить не смог. Ищи косяк у себя, в клиентском скрипте.

Быстрый лайфхак прямо из Console, чтобы не спорить:

// Дёргаем API ручками, как последние индейцы
fetch('/api/endpoint')
  .then(response => {
    console.log('Статус, сука:', response.status); // Смотрим статус
    return response.json();
  })
  .then(data => console.log('Данные, что сервер выдал:', data)) // Смотрим, что нам прислали
  .catch(error => console.error('Ошибка сети или парсинга, вот же ж:', error));

Если этот запрос сам сдох с ошибкой или вернул какую-то хуйню вместо данных — проблема точно на сервере или в сети. А если данные пришли красивые и правильные, а на странице нихуя — ну, извини, дружок, это твой фронтенд-код обосрался, иди чини.