import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
import { doc, getDoc } from "firebase/firestore";
import { dbService } from "./config/firebase";
// This function can be marked `async` if using `await` inside
export async function middleware(request: NextRequest) {
console.log("request.nextUrl.pathname:", request.nextUrl.pathname);
const nextURL = request.nextUrl.pathname;
const splitURL = nextURL.split("/");
const id = splitURL[2];
console.log("id : ", id);
const snap = await getDoc(doc(dbService, "recipe", id));
if (snap.exists()) {
return;
} else {
return NextResponse.redirect(new URL("/deletePage", request.url));
}
}
// See "Matching Paths" below to learn more
export const config = {
matcher: "/detailRecipePage/:path*",
};
config의 matcher에서 /detailRecipePage/:path*의 저 Path 부분에 포스트 id값들이 들어가고
만약 파베에 id가 없을 경우 snap.exit()가 없을거고
그럼 else문이 실행되면서 redirect로 삭제페이지로 갈 수 있도록 미들웨어를 사용해주면 되는 것!!!!!
아 그리고 middleware.ts 파일은 root 폴더에다가 만들어주면 된다.
'✍ 따뜻한 개발 공부' 카테고리의 다른 글
SDK와 라이브러리의 관계 (0) | 2023.04.21 |
---|---|
HTTP보다 HTTPS가 안전한 이유가 뭘까? (0) | 2023.04.18 |
NEXT.js + Firebase / next.js에서 env 환경변수 설정해주기 (0) | 2023.02.23 |
3시간은 머리 싸맨거같은 브라우저 뒤로가기 버튼 클릭시 이전 페이지로 보내기 ( next.js + react 같은 페이지 내 컴포넌트 갈아끼우는거) (0) | 2023.02.16 |
next.js에서 하나의 페이지에 여러 컴포넌트 갈아끼워지는것처럼 만들기 / 리액트 라우터돔처럼 컴포넌트 갈아끼워주기 (0) | 2023.02.16 |
댓글