Compare commits

..

No commits in common. "abc35ad0ca465c9a76331b320e952ab2db99b4f8" and "df50662d1835fe9bb86f54e36fc3d0b3d44f0877" have entirely different histories.

2 changed files with 5 additions and 43 deletions

View File

@ -35,7 +35,7 @@ router.post(
.isNumeric()
.withMessage('Value must be a number'),
],
validate, // Проверяем результаты валидации
validate, // Middleware для обработки ошибок валидации
(req, res) => {
try {
const { name, value } = req.body;

View File

@ -26,70 +26,32 @@ export async function apiRequest<T = unknown>(
options: RequestInit = {}
): Promise<ApiResponse<T>> {
try {
// Добавляем timeout через AbortController
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 секунд
console.log(`[API] Request to: ${apiUrl}/api/${endpoint}`);
const response = await fetch(`${apiUrl}/api/${endpoint}`, {
...options,
signal: controller.signal,
headers: {
'Content-Type': 'application/json',
...options.headers,
},
});
clearTimeout(timeoutId);
// Сначала читаем ответ как текст, потом парсим JSON
const responseText = await response.text();
let data: any;
if (responseText) {
try {
data = JSON.parse(responseText);
} catch (jsonErr) {
// Если не удалось распарсить JSON, возвращаем текст как ошибку
console.error('Failed to parse JSON response:', responseText);
return {
success: false,
error: `Invalid JSON response: ${responseText.substring(0, 100)}`,
};
}
} else {
data = {};
}
const data = await response.json();
// Если статус не успешный, возвращаем данные с ошибкой
// (могут содержать детали валидации)
if (!response.ok) {
return {
success: false,
error: data.error || data.message || `HTTP error! status: ${response.status}`,
error: data.error || `HTTP error! status: ${response.status}`,
errors: data.errors, // Ошибки валидации, если есть
};
}
return data;
} catch (err) {
console.error('[API] Error:', err);
let errorMessage = 'Unknown error';
if (err instanceof Error) {
if (err.name === 'AbortError') {
errorMessage = 'Request timeout - сервер не отвечает';
} else if (err.message.includes('Failed to fetch')) {
errorMessage = 'Не удалось подключиться к серверу. Проверьте, что бэкенд запущен.';
} else {
errorMessage = err.message;
}
}
console.error('API Error:', err);
return {
success: false,
error: errorMessage,
error: err instanceof Error ? err.message : 'Unknown error',
};
}
}