• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Next.js 게시판 notFound() 호출관련

notFound() 호출관련

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 년, 2 월 전에 수정됐습니다.
    #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 호 / 개인정보관리자 : 박종흠