home2 ๊ฒŒ์‹œํŒ Next.js ๊ฒŒ์‹œํŒ notFound() ํ˜ธ์ถœ๊ด€๋ จ

notFound() ํ˜ธ์ถœ๊ด€๋ จ

  • ์ด ์ฃผ์ œ์—๋Š” 1๊ฐœ ๋‹ต๋ณ€, 2๋ช… ์ฐธ์—ฌ๊ฐ€ ์žˆ์œผ๋ฉฐ codingapple๊ฐ€ 1 ๋…„, 7 ์›” ์ „์— ์ „์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.
2 ๊ธ€ ๋ณด์ž„ - 1 ์—์„œ 2 ๊นŒ์ง€ (์ด 2 ์ค‘์—์„œ)
  • ๊ธ€์“ด์ด
    ๊ธ€
  • #120382

    Byeory
    ์ฐธ๊ฐ€์ž
    import { connectDB } from "@/util/database";
    import { ObjectId } from "mongodb";
    import Comment from "./Comment";
    import { authOptions } from "@/pages/api/auth/[...nextauth]";
    import { getServerSession } from "next-auth";
    import { notFound } from "next/navigation";
    export default async function Detail(props) {
      try {
        // ID ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
        if (!ObjectId.isValid(props.params.id)) {
          return (
            <div>
              ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์˜ ์š”์ฒญ๊ฐ’์ด ์•„๋‹™๋‹ˆ๋‹ค. 24๊ธ€์ž์˜ 16์ง„์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
            </div>
          );
        }
        // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ฐ ๋ฌธ์„œ ์กฐํšŒ
        const db = (await connectDB).db("my_mongo_db");
        const result = await db.collection("post").findOne({
          _id: new ObjectId(props.params.id),
        });
        // ๋ฌธ์„œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—†๋Š” ๊ฒฝ์šฐ
        if (result == null) {
          return notFound();
        } else {
          // ๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ฐ€์ ธ์˜ค๊ธฐ
          const loginSession = await getServerSession(authOptions);
          let sessionData = loginSession;
          // ๋กœ๊ทธ์ธ ์„ธ์…˜ ํ™•์ธ ๋ฐ OAuth ์‚ฌ์šฉ์ž ์ •๋ณด ์ฒ˜๋ฆฌ
          if (!loginSession || !loginSession.user._id) {
            const OAuthAccounts = (await connectDB).db("my_mongo_db");
            const OAuthResult = await OAuthAccounts.collection("users").findOne({
              email: loginSession.user.email,
            });
            if (OAuthResult) {
              sessionData = {
                ...loginSession,
                user: {
                  _id: OAuthResult._id.toString(),
                  name: OAuthResult.name || loginSession.user.name,
                  email: OAuthResult.email,
                },
              };
            }
          }
          // ์„ฑ๊ณต์ ์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ฐพ์€ ๊ฒฝ์šฐ, ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง
          return (
            <div>
              <h4>์ƒ์„ธํŽ˜์ด์ง€</h4>
              <h4>{result.title}</h4>
              <p>{result.content}</p>
              <Comment
                parentId={result._id.toString()}
                loginSession={sessionData}
              />
            </div>
          );
        }
      } catch (error) {
        // ์—๋Ÿฌ ์ฒ˜๋ฆฌ
        console.error("Error fetching post details:", error);
        return <div>์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.</div>;
      }
    }
    ์ค‘๊ฐ„์— ๋งŒ๋‚ฌ๋˜ ์œ ํšจ์„ฑ ๊ฒ€์ฆ๋„ ์ถ”๊ฐ€ํ–ˆ๊ณ  try-catch ๊ตฌ๋ฌธ์„ ๋„ฃ์–ด์„œ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋„ ๊ฐ•ํ™”ํ•˜์˜€๋Š”๋ฐ์š”
    notFound() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ
     
    export default function Loading(){
        return <h4>404 ์—๋Ÿฌ์ž„ ๊ทธ๊ฑด ์—†๋Š” ํŽ˜์ด์ง€์ธ๋ฐ์š”</h4>
      }
     
    ์ด์™€ ๊ฐ™์€ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์™€์•ผํ•˜๋Š”๋ฐ ์ฒ˜๋ฆฌ๋˜์ง€์•Š๊ณ  catch๋กœ ์—๋Ÿฌ์ฒ˜๋ฆฌ๊ฐ€ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.
     
    ์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ๋œ ์ผ์ธ์ง€์š”??
     
    Next.JS 14 ๋ฒ„์ „์ด๊ธด ํ•ฉ๋‹ˆ๋‹ค.
    ์ค‘๊ฐ„์— OAuth ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์€ .env์— ์‚ฌ์šฉํ•  db ๋ช…์นญ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์ง€์•Š์•„์„œ test๋ผ๋Š” default db๊ฐ€ ์ƒ๊ฒจ์„œ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ด ๊ฒŒ์‹œ๊ธ€์€ Byeory์— ์˜ํ•ด 1 ๋…„, 7 ์›” ์ „์— ์ˆ˜์ •๋์Šต๋‹ˆ๋‹ค.
    #120397

    codingapple
    ํ‚ค ๋งˆ์Šคํ„ฐ
    notFound() ์‹คํ–‰๋˜๋Š”์ง€ ๋ฐ”๋กœ์œ„์—์„œ console.log๊ฐ™์€๊ฑฐ ์จ๋ด…์‹œ๋‹ค
2 ๊ธ€ ๋ณด์ž„ - 1 ์—์„œ 2 ๊นŒ์ง€ (์ด 2 ์ค‘์—์„œ)
  • ๋‹ต๋ณ€์€ ๋กœ๊ทธ์ธ ํ›„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

About

ํ˜„์žฌ ์›” 700๋ช… ์‹ ๊ทœ์ˆ˜๊ฐ•์ค‘์ž…๋‹ˆ๋‹ค.

  (09:00~20:00) ๋น ๋ฅธ ์ƒ๋‹ด์€ ์นดํ†ก ํ”Œ๋Ÿฌ์Šค์นœ๊ตฌ ์ฝ”๋”ฉ์• ํ”Œ (๋งํฌ)
  admin@codingapple.com
  ์ด์šฉ์•ฝ๊ด€, ๊ฐœ์ธ์ •๋ณด์ฒ˜๋ฆฌ๋ฐฉ์นจ
โ“’ Codingapple, ๊ฐ•์˜ ์˜ˆ์ œ, ์˜์ƒ ๋ณต์ œ ๊ธˆ์ง€
top

ยฉ Codingapple, All rights reserved. ์Šˆํผ๋กœ์ผ“ ์—๋“€์ผ€์ด์…˜ / ์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋™๊ตฌ ๊ณ ๋•๋กœ 19๊ธธ 30 / ์‚ฌ์—…์ž๋“ฑ๋ก๋ฒˆํ˜ธ : 212-26-14752 ์˜จ๋ผ์ธ ๊ต์œกํ•™์›์—… / ํ†ต์‹ ํŒ๋งค์—…์‹ ๊ณ ๋ฒˆํ˜ธ : ์ œ 2017-์„œ์šธ๊ฐ•๋™-0002 ํ˜ธ / ๊ฐœ์ธ์ •๋ณด๊ด€๋ฆฌ์ž : ๋ฐ•์ข…ํ