Ответ
Лучше комбинировать оба подхода.
Глобально — обрабатывай стандартные ошибки (401, 403, 500) в HTTP-интерсепторе. Например:
axios.interceptors.response.use(
(response) => response,
(error) => {
if (error.response.status === 401) {
redirectToLogin();
}
return Promise.reject(error);
}
);
Локально — обрабатывай специфичные ошибки (например, валидация формы) прямо в запросе:
try {
const res = await api.post('/signup', data);
} catch (error) {
if (error.response.status === 400) {
setFieldErrors(error.response.data.errors);
}
}
Такой подход обеспечивает гибкость и избегает дублирования кода.
Ответ 18+ 🔞
А, ну ты смотри, какие вопросы поднимаешь! Прямо стратегические решения по архитектуре запрашиваешь. Слушай, тут всё просто, как три копейки, но если накосячить — потом будешь локально, в каждом компоненте, эти ебушки-воробушки с ошибками разгребать. Овердохуища работы.
Так, по делу.
Глобально, на всю твою банду — ты ловишь в интерсепторе всё, что летит по HTTP и является общей, ёпта, проблемой. Типа, токен протух (401), доступ запрещён (403) или сервер упал и ему плохо (500). Это как дежурный по части: увидел нарушителя — сразу в кутузку, не спрашивая.
axios.interceptors.response.use(
(response) => response,
(error) => {
if (error.response.status === 401) {
redirectToLogin(); // Всё, пиздуй на логин, нечего тут шастать без пропуска
}
return Promise.reject(error);
}
);
А локально, в конкретном месте — ты работаешь с ошибками, которые только этому месту и важны. Ну, например, пользователь в форму насрал какую-то дичь, и бэкенд вернул 400 с описанием, что именно не так. Это же не глобальная катастрофа, а так, мелкая бытовая пиздобратия.
try {
const res = await api.post('/signup', data);
} catch (error) {
if (error.response.status === 400) {
setFieldErrors(error.response.data.errors); // Показываем ему, где он накосячил, прямо под полями
}
}
Вот и весь секрет, блядь. Глобальное — для всех, как закон. Локальное — для частных случаев, как разборка у подъезда. Такой подход — он и гибкий, и дублировать одно и то же по сто раз не придётся. А то знаю я этих горе-архитекторов, которые всё в интерсептор пихают, а потом удивляются, почему у них форма не может нормально сказать «логин уже занят, мудак».