2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2024년 4월 15일 18:59 #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 월 전에 수정됐습니다.
-
이 게시글은
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.