From 282788035122020f6ce7eac219e94a399223f94e Mon Sep 17 00:00:00 2001 From: dsyoon Date: Sat, 27 Dec 2025 16:58:28 +0900 Subject: [PATCH] init --- src/pages/AiNewsPage.jsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/pages/AiNewsPage.jsx b/src/pages/AiNewsPage.jsx index c5c4bb7..a1e21e7 100644 --- a/src/pages/AiNewsPage.jsx +++ b/src/pages/AiNewsPage.jsx @@ -68,7 +68,16 @@ export default function AiNewsPage({ onNavigate }) { setNewsHasMore(false); return null; } - const data = await res.json(); + let data; + try { + data = await res.json(); + } catch (e) { + // Apache SPA rewrite(.htaccess 포함)가 API까지 잡아먹으면 index.html(HTML)이 내려올 수 있음 + const ct = res.headers.get('content-type') || ''; + setNewsError(`인사이트 API 응답이 JSON이 아닙니다. (content-type: ${ct || 'unknown'}) Apache rewrite/.htaccess에서 /community 제외가 필요합니다.`); + setNewsHasMore(false); + return null; + } const rawItems = Array.isArray(data.items) ? data.items : []; // 서버는 보통 최신이 먼저 오므로, UI를 "아래가 최신" 형태로 유지하려고 reverse 유지 const items = rawItems.slice().reverse(); @@ -104,7 +113,9 @@ export default function AiNewsPage({ onNavigate }) { } return nextOffset; } catch (e) { - setNewsError('인사이트 데이터를 불러오지 못했습니다. (네트워크 오류)'); + // e.g. "Failed to fetch" (mixed content/SSL/DNS 등) + const msg = e?.message ? ` (${e.message})` : ''; + setNewsError(`인사이트 데이터를 불러오지 못했습니다. (네트워크 오류)${msg}`); setNewsHasMore(false); return null; } finally {