Zod on the server and the client: the schema you define once and the three ways it breaks in runtime۱۴۰۵ تیر ۵, جمعه
برنامه_نویسی ۲۳ خرداد ۱۴۰۵

Zod on the server and the client: the schema you define once and the three ways it breaks in runtime

در Next.js 16، اشتراک یک طرحواره Zod بین کلاینت، سرور و Edge Runtime سه مشکل ایجاد می‌کنه. اول، متد refine اگر به APIهای Node.js وابسته باشه توی Edge Runtime از کار می‌افته. دوم، متد transform با خروجی غیرقابل سریال‌سازی (مثل Set) توی Server Action خطای سریال‌سازی می‌ده. سوم، خطاهای خام Zod که مستقیم به کلاینت میرن اطلاعات داخلی رو لو می‌دن. راه حلش جدا کردن طرحواره‌ها بر اساس محیط و استفاده از safeParse برای مدیریت خطاست.

Zod on the server and the client: the schema you define once and the three ways it breaks in runtime

چرا مهمه؟

بسیاری از توسعه‌دهنده‌ها فکر می‌کنن یه طرحواره Zod رو می‌شن بدون تغییر توی همه جای Next.js 16 استفاده کنن. اما سه محیط اجرایی (کلاینت، سرور Node.js و Edge Runtime) محدودیت‌های متفاوتی دارن. وابستگی به APIهای Node.js توی Edge Runtime، خروجی‌های غیرقابل سریال‌سازی توی Server Action و نشت اطلاعات از خطاهای پالایش‌نشده سه خطایی‌ان که تایپ‌اسکریپت هم نمی‌گیرتشون. این خبر نشون می‌ده چطور از این خطاها جلوگیری کنید و طرحواره‌ها رو بر اساس محیط بهینه کنید.

به درد کی می‌خوره؟

• توسعه‌دهندگان Next.js 16 • برنامه‌نویسانی که از Zod برای اعتبارسنجی استفاده می‌کنند • مهندسان فرانت‌اند و بک‌اند در پروژه‌های Full-stack • تیم‌های DevOps که با Edge Runtime و Server Actions کار می‌کنند • متخصصان امنیت نرم‌افزار

تو عمل چی کار کنیم؟

بعد از خوندن این خبر، می‌تونید طرحواره‌های Zod پروژه‌تون رو بررسی کنید. اول، طرحواره‌هایی که توی Edge Runtime اجرا می‌شن رو از هر کد وابسته به Node.js پاک کنید. دوم، از متد transform با خروجی‌های غیرقابل سریال‌سازی مثل Set یا Map توی طرحواره‌های مشترک استفاده نکنید. سوم، توی Server Actionها همیشه از safeParse استفاده کنید و خودتون خطاها رو برای کلاینت آماده کنید. با این کارها از خطاهای ناگهانی و نشت اطلاعات جلوگیری می‌کنید.

نظر BlueIT News

تجربه پروژه‌های واقعی نشون می‌ده خیلی از تیم‌ها تا وقتی به این خطاها نخورن، اهمیت محیط اجرا رو دست کم می‌گیرن. پیشنهاد ما: از همون اول طرحواره‌های هر محیط رو جدا کنید و این رو به عنوان یه قانون معماری پروژه در نظر بگیرید.