언어·프레임워크/Next.js
[Next.js] [Next.js] 인프런 강의 "Next.js 필수 개발 가이드 3시간 완성!" 정리(Zod를 이용한 유효성 검사)
DandyNow
2024. 2. 13. 14:03
728x90
반응형
1. Zod 설치
Zod는 유효성 검사 라이브러리이다.
npm i zod
😉 공식 문서 : https://zod.dev/
2. 적용 방법
📌 스키마 작성
// src/app/api/users/schema.ts
import { z } from "zod";
const schema = z.object({
name: z.string().min(3),
email: z.string().email(),
age: z.number(),
});
export default schema;
📌 Zod 적용
// src/app/api/users/[id]/route.tsx
import { NextRequest, NextResponse } from "next/server";
import schema from "../schema";
// (생략)
export async function PUT(
request: NextRequest,
{ params }: { params: { id: number } }
) {
const body = await request.json();
/*
zod schema 적용
parse method : 오류 발생시 오류 메시지, throw 함수 호출 후 서버 중단
safeParse method : 서버 중단되지 않음, 유효성 검증 결과 확인 가능
*/
const validation = schema.safeParse(body);
if (!validation.success) {
return NextResponse.json(validation.error.errors, { status: 404 });
}
// zod 사용 안했을 때 코드
// if (!body.name) {
// return NextResponse.json({ error: "Name is required" }, { status: 404 });
// }
if (params.id > 10) {
return NextResponse.json({ error: "User Not Found" }, { status: 404 });
}
return NextResponse.json({ id: 1, name: body.name });
}
/*
윈도우 curl을 이용한 요청 테스트
name 속성에 빈값을 넣고 PUT 요청하였다.
요청 명령 : curl -d "{""name"":""""}" -H "Content-Type: application/json" -X PUT http://localhost:3000/api/users/1
요청 결과 : [{"code":"too_small","minimum":3,"type":"string","inclusive":true,"exact":false,"message":"String must contain at least 3 character(s)","path":["name"]},{"code":"invalid_type","expected":"string","received":"undefined","path":["email"],"message":"Required"},{"code":"invalid_type","expected":"number","received":"undefined","path":["age"],"message":"Required"}]
*/
728x90
반응형