TypeScript-first 스키마 선언 및 검증 라이브러리
Zod는 빠르고 간단하게 스키마를 선언하고 검증하는 데 중점을 두고 있으며, TypeScript와 JavaScript 모두에서 사용할 수 있다
import { z } from "zod";
// 스키마 정의
const UserSchema = z.object({
userId: z.string(),
name: z.string(),
email: z.string().nullable(),
countryCode: z.string().optional(),
dateCreate: z.string().optional(),
dateUpdate: z.string().optional(),
});
// 정의된 스키마로 타입 추론
export type User = z.infer<typeof UserSchema>;
const user = { userId: 'test', name:'test', email: 'email' }
const user2 = { userId: 'test' }
// 정의된 스키마로 유효성 검증
UserSchema.parse(user); // 통과 - success 반환
UserSchema.parse(user2); // 실패 - error throw
UserSchema.safeParse(user2); // 실패 - 오류 객체 반환
const validation = UserSchema.safeParse(user);
// 성공 시 sucess 객체를 반
if (!validation.success) {
return NextResponse.json(validation.error.errors, { status: 404 });
}
parse() 와 safeParse() 를 통해 유효성 검사를 할 수 있다
검증 실패 시 오 메시지와 함께 error throw
검증 실패 시 결과 객체에 오류 메시지 및 여러 정보를 전달
import { z } from "zod";
const UserScheme = z.object({
email: z.string(),
image: z.string(),
});
const user = {email:'', image: ''}
UserSchema.safeParse(user) // 성공
위와 같은 형식으로 검증 가능하지만
아무 문자열이나 들어와도 검증에 성공하게 된다
import { z } from "zod";
const UserScheme = z.object({
email: z.string().email(),
image: z.string().url(),
});
const user = {email:'', image: ''}
UserSchema.parse(user) //실패
.email() 등의 검증자를 사용하여 검증 포맷을 추가할 수 있다
검증에 실패하면 아래와 같이 validation error 가 발생한다
ZodError: [
{
"validation": "email",
"code": "invalid_string",
"message": "Invalid email",
"path": [
"email"
]
},
{
"validation": "url",
"code": "invalid_string",
"message": "Invalid url",
"path": [
"image"
]
},
]