diff --git a/ssr/package.json b/ssr/package.json index db1a534..4d26357 100644 --- a/ssr/package.json +++ b/ssr/package.json @@ -4,8 +4,8 @@ "description": "SSR 렌더링으로 영화 목록 불러오기", "main": "server/index.js", "scripts": { - "start": "NODE_TLS_REJECT_UNAUTHORIZED=0 node server/index.js", - "dev": "NODE_TLS_REJECT_UNAUTHORIZED=0 nodemon server/index.js --watch" + "start": "NODE_TLS_REJECT_UNAUTHORIZED=1 node server/index.js", + "dev": "NODE_TLS_REJECT_UNAUTHORIZED=1 nodemon server/index.js --watch" }, "type": "module", "dependencies": { diff --git a/ssr/public/styles/main.css b/ssr/public/styles/main.css index 1cb07d9..59cae64 100644 --- a/ssr/public/styles/main.css +++ b/ssr/public/styles/main.css @@ -43,6 +43,13 @@ button.primary { border-radius: 4px; } +a.primary { + color: var(--color-white); + font-weight: bold; + background-color: var(--color-lightblue-90); + border-radius: 4px; +} + #wrap { min-width: 1440px; background-color: var(--color-bluegray-100); diff --git a/ssr/server/index.js b/ssr/server/index.js index 09efd9a..29bbcbf 100644 --- a/ssr/server/index.js +++ b/ssr/server/index.js @@ -15,6 +15,7 @@ const __dirname = path.dirname(__filename); app.use("/assets", express.static(path.join(__dirname, "../public"))); app.use("/", movieRouter); + // app.use("/members", membersRouter); // 본 미션 참고를 위한 코드이며 사전 미션에서는 사용하지 않습니다. // Start server diff --git a/ssr/server/routes/index.js b/ssr/server/routes/index.js index 84d32f2..90aab0a 100644 --- a/ssr/server/routes/index.js +++ b/ssr/server/routes/index.js @@ -2,20 +2,110 @@ import { Router } from "express"; import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; +import { + fetchMovieDetails, + fetchNowPlayingMovieItems, + fetchPopularMovieItems, + fetchTopRatedMovieItems, + fetchUpcomingMovieItems, +} from "../src/api/movie.js"; +import { renderMovieItems } from "../src/render/renderMovieItems.js"; +import { renderHeader } from "../src/render/renderHeader.js"; +import { renderMovieDetails } from "../src/render/renderMovieDetails.js"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const router = Router(); -router.get("/", (_, res) => { - const templatePath = path.join(__dirname, "../../views", "index.html"); - const moviesHTML = "
들어갈 본문 작성
"; +const fetchMovieItems = async (path) => { + switch (path) { + case "/": + case "/now-playing": + return await fetchNowPlayingMovieItems(); + case "/popular": + return await fetchPopularMovieItems(); + case "/top-rated": + return await fetchTopRatedMovieItems(); + case "/upcoming": + return await fetchUpcomingMovieItems(); + default: + throw new Error("Invalid path: 잘못된 경로 입니다."); + } +}; - const template = fs.readFileSync(templatePath, "utf-8"); - const renderedHTML = template.replace("", moviesHTML); +const renderMoviePage = async (req, res) => { + try { + const templatePath = path.join(__dirname, "../../views", "index.html"); + const currentPath = req.path === "/" ? "/now-playing" : req.path; - res.send(renderedHTML); -}); + const movies = await fetchMovieItems(currentPath); + const featuredMovie = movies[0]; + + const moviesHTML = renderMovieItems(movies); + const headerHTML = renderHeader(featuredMovie); + + let template = fs.readFileSync(templatePath, "utf-8"); + + const sectionTitles = { + "/now-playing": "상영 중인 영화", + "/popular": "지금 인기 있는 영화", + "/top-rated": "평점이 높은 영화", + "/upcoming": "개봉 예정 영화", + }; + + template = template.replace( + /${genres.map(({ name }) => name).join(", ")}
+
+
+ ${vote_average.toFixed(1)}
+
+ ${overview} +
+
+ ${round(vote_average, 1)}