fix(frontend): apiFetchWithStatus body stream double-read crash #149
1 changed files with 10 additions and 6 deletions
|
|
@ -47,13 +47,17 @@ export async function apiFetchWithStatus<T>(
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
let body: unknown = null;
|
let body: unknown = null;
|
||||||
// 204 No Content имеет пустое тело; для всех остальных пытаемся JSON
|
// 204 No Content имеет пустое тело; для всех остальных читаем как text один раз
|
||||||
|
// (fetch body stream consumable только один раз — нельзя сначала .json() потом .text()).
|
||||||
if (response.status !== 204) {
|
if (response.status !== 204) {
|
||||||
try {
|
const rawText = await response.text();
|
||||||
body = await response.json();
|
if (rawText) {
|
||||||
} catch {
|
try {
|
||||||
// fallback на text() — может прилететь HTML error page от Caddy
|
body = JSON.parse(rawText);
|
||||||
body = { detail: await response.text() };
|
} catch {
|
||||||
|
// Не JSON (HTML error page от Caddy / 502 / etc) — оборачиваем в detail
|
||||||
|
body = { detail: rawText };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue