11import { getProducts , getCategories , getProduct } from "./api/routes.js" ;
22import { ServerRouter } from "./router/serverRouter.js" ;
3+ import { ServerHomePage } from "./pages/server/ServerHomePage.js" ;
4+ import { ServerProductDetailPage } from "./pages/server/ServerProductDetailPage.js" ;
35
46const serverRouter = new ServerRouter ( ) ;
57
@@ -55,7 +57,15 @@ export const render = async (url) => {
5557 const result = await notFoundRoute . handler ( { } , { } ) ;
5658
5759 return {
58- html : '<div id="app"><h1>404 - Page Not Found</h1></div>' ,
60+ html : `<div id="app">
61+ <div class="min-h-screen bg-gray-50 flex items-center justify-center">
62+ <div class="text-center">
63+ <h1 class="text-2xl font-bold text-gray-900 mb-2">404 - Page Not Found</h1>
64+ <p class="text-gray-600 mb-4">${ result . data . message } </p>
65+ <a href="/" class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700">홈으로</a>
66+ </div>
67+ </div>
68+ </div>` ,
5969 head : "<title>404 - Page Not Found</title>" ,
6070 initialData : result . data ,
6171 } ;
@@ -64,46 +74,73 @@ export const render = async (url) => {
6474 // 2. 데이터 프리페칭
6575 const result = await route . handler ( route . params , route . query ) ;
6676
67- // 3. HTML 및 메타데이터 생성 (현재는 간단한 형태)
77+ // 3. 실제 컴포넌트 렌더링
6878 let html , title ;
6979
80+ let initialData ;
81+
7082 switch ( result . type ) {
7183 case "homepage" :
72- html = `<div id="app">
73- <h1>Shopping Mall</h1>
74- <p>Products loaded: ${ result . data . products . length } </p>
75- <p>Total products: ${ result . data . pagination . total } </p>
76- </div>` ;
84+ html = `<div id="app">${ ServerHomePage ( {
85+ products : result . data . products ,
86+ categories : result . data . categories ,
87+ query : result . data . filters ,
88+ totalCount : result . data . pagination . total ,
89+ } ) } </div>`;
7790 title = "Shopping Mall - Home" ;
91+ // 테스트에서 기대하는 형태로 initialData 구성
92+ initialData = {
93+ products : result . data . products ,
94+ categories : result . data . categories ,
95+ totalCount : result . data . pagination . total ,
96+ } ;
7897 break ;
7998
8099 case "product-detail" :
81- html = `<div id="app">
82- <h1>${ result . data . currentProduct . title } </h1>
83- <p>Price: ${ result . data . currentProduct . lprice } 원</p>
84- <p>Brand: ${ result . data . currentProduct . brand } </p>
85- </div>` ;
100+ html = `<div id="app">${ ServerProductDetailPage ( {
101+ product : result . data . currentProduct ,
102+ relatedProducts : result . data . relatedProducts || [ ] ,
103+ } ) } </div>`;
86104 title = `${ result . data . currentProduct . title } - Shopping Mall` ;
105+ // 상품 상세 페이지용 initialData
106+ initialData = {
107+ currentProduct : result . data . currentProduct ,
108+ } ;
87109 break ;
88110
89111 default :
90112 html = `<div id="app">
91- <h1>404 - Page Not Found</h1>
92- <p>${ result . data . message } </p>
113+ <div class="min-h-screen bg-gray-50 flex items-center justify-center">
114+ <div class="text-center">
115+ <h1 class="text-2xl font-bold text-gray-900 mb-2">404 - Page Not Found</h1>
116+ <p class="text-gray-600 mb-4">${ result . data . message } </p>
117+ <a href="/" class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700">홈으로</a>
118+ </div>
119+ </div>
93120 </div>` ;
94121 title = "404 - Page Not Found" ;
122+ initialData = { error : result . data . message } ;
95123 }
96124
97125 return {
98126 html,
99127 head : `<title>${ title } </title>` ,
100- initialData : result . data ,
128+ initialData,
101129 } ;
102130 } catch ( error ) {
103131 console . error ( "Server rendering error:" , error ) ;
104132
105133 return {
106- html : '<div id="app"><h1>Server Error</h1><p>Something went wrong.</p></div>' ,
134+ html : `<div id="app">
135+ <div class="min-h-screen bg-gray-50 flex items-center justify-center">
136+ <div class="text-center">
137+ <h1 class="text-2xl font-bold text-gray-900 mb-2">Server Error</h1>
138+ <p class="text-gray-600 mb-4">Something went wrong.</p>
139+ <p class="text-sm text-red-600">${ error . message } </p>
140+ <a href="/" class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 mt-4 inline-block">홈으로</a>
141+ </div>
142+ </div>
143+ </div>` ,
107144 head : "<title>Server Error</title>" ,
108145 initialData : { error : "Server rendering failed" } ,
109146 } ;
0 commit comments