Ali Razavi
Ali Razavi
خواندن ۸ دقیقه·۲ سال پیش

Validation in nodejs (اعتبار سنجی در نود جی اس)

اعتبار سنجی در محیط نود جی اس :

خیلی مهمه که بتونی برنامه ای تولید کنید که بتونید ورودی های کاربر رو اعتبار سنجی بکنید . خیلی وقت ها باگ های برنامه های سمت وب سر این به وجود میاد مقدار ورودی کاربر اعتبار سنجی نشده وارد دیتابیس شده و اینگونه میشه یک سری باگ ها پیش میاد . در ادامه این مقاله قصد اینو دارم چند نوع روش اعتبارسنجی کتابخانه های مهم که در همین راستا توسعه داده شدند بهتون معرفی کنم این نکته هم بهتون بگم پکیج های معرفی شده در سه بخش توضیحات اولیه - آمار نصب - نحوه چگونگی استفاده مورد برسی قرار خواهند گرفت . پس در ادامه با من همراه باشید .


Express validator :

توضیحات اولیه :

کمتر کسی هست نود جی اس کار کرده باشه با این پکیج کار نکرده باشه یا حداقل اسمشو نشنیده باشه . از نظر من بهترین پکیج اعتبارسنجی در نود جی اس همین پکیج هستش که در ادامه توضیح خواهم داد چرا ! پس پنیک نکنید :)

امار ارقام :

نمونه آماری از سایت مرجع npm
نمونه آماری از سایت مرجع npm

خب همون طور دارید مشاهده می کنید با تعداد ۳۲۹ هزار تا دانلودی در هفته در npm و با ۶K تقریبا star در گیت هاب نشون میده پکیج بسیار قدرت مندی هستش هم اکنون ورژن ۶ این پکیج مورد استفاده قرار میگیره ۱۱۳ تا توسعه دهنده هم اکنون این پکیج نگهداری میکنند .و اینکه خوبی این پکیج حجم باندل سایز این پکیج هستش که تنها ۹۸ کیلوبایت حجم داره که این شگفت انگیزه

نحوه استفاده :

خب بریم سراغ نوشتن یک قطعه کد با این پکیج از نحوه نصب این پکیج ما شروع میکنیم . من از پکیج منیجر npm استفاده میکنم شما میتونید از هر نوع پکیج منیجر مدنظر خودتون استفاده کنید :) پس don't worry

npm i express-validator



فرض کنید ما یک controller داریم به اسم authController میخایم اطلاعات یک کاربر بگیریم سپس عملیات ثبت نام اونو انجام بدیم ( اینو بگم داخل کل پکیج ها ما این موضوع رو در نظر میگیریم ) . میایم یک فایل درست میکنید داخل دایرکتوری validation من همیشه دوست دارید یک دایرکتوری جدا داشته باشم برای اینکار میایم یک فایل درست میکنیم به اسم auth.js سپس میایم مقادیری که از body میاد رو validation میکنیم .

اینجا اومدیم از پکیج express-validator مقدار body رو گرفتیم یک تابع درست میکنیم به اسم register validation سپس میایم یک ارایه داخل این تابع بر میگردونیم و مقادیر body رو validation میکنیم همون طور در تصویر قابل مشاهده هستش اولین مقدار username هستش که اومدیم اول طول رشته رو اعتبار سنجی کردیم سپس اومدیم با تابع withMessage متن پیام اون validation رو نوشتیم سپس با تابع bail اومدیم گفتیم اگر این مورد مشکل داشت دیگه نره بقیشو چک کن متن پیام رو نشون ما بده به اصطلاح میایم یک ارور از هر فیلد نشون میدیم اینطوری یکم بهتره سپس اومدیم گفتیم isAlphanumeric یعنی میتونه این فیلد شامل اعداد و رشته ها باشه بعد اومدیم یک custom validation نوشتیم که همین موضوع برای من :) جذابه تو این پکیج که یکم این پکیج برای من حداقل متفاوت تر کرده طبق سیاست برنامه نمیخایم نام کاربری تکراری داشته باشیم پس میایم یک custom validation براش مینویسیم . و چون که میخایم وصل دیتابیس بشیم و یک کوئری داشته باشیم و این عملیات زمان بر هستش async میکنیم این حرکتو .

خب بقیش هم مشخصه براتون توضیح خاصی نداره فقط

  • نکته اینکه همه این موضوعات رو میتونید با جی اس خام انجام بدید و نیاز پکیج نداشته باشید اما به طور مثال فقط برای چک کردن اینکه ایمیل صحیح وارد شده یا نه باید regex بنویسید و همچنین درصد خطا بالاتر میبره که به ریسک این موضوع نمی ارزه :)
  • نکته اینکه اعتبارسنجی موبایل ایران هم ساپورت میکنه این پکیج که این خودش چند لول کار بالاتر میبره :)
  • نکته اینکه میتونید دیتا از سمت کاربر رو پاک سازی کنید یا به اصطلاح sanitize کنید .

سپس برای اینکه داخل controller مون بتونیم ازش استفاده کنیم بهترین روش اینکه یک middleware بسازیم به اسم validation و به این شکل ارور ها رو نمایش بدیم .

میایم از پکیج express-validator مقدار validation result میگیریم سپس میایم یک یک تابع بر اساس شرایط middleware express مینویسیم که اینجا میاد اروری های از سمت request میاد رو میگیره و هر کدوم رو مشخص میکنه برای کدوم قسمته که بعد هم میایم نمایش میدیم یا اینکه اگر اروری وجود نداشت به مرحله بعد میریم .

و سپس داخل Route های که میخایم validation صورت بگیره به این شکل مورد استفاده قرارش میدیم .

اینجا اول اومدیم تابع validation رو که خودمون نوشتیم رو صدا میزنیم سپس میایم از middleware checkvalidation استفاده میکنیم البته این به صورت لوکاله همون طور میدونید شما میتونید middleware ها رو به صورت گلوبال هم تعریف کنید که دیگه این دردسر ها نداشته باشید که پیشنهاد میکنم از این روش استفاده کنید بهترین روش هم هست .

خب یک معجزه رخ داد :) شما الان میتونید با خیال راحت دیتا رو از سمت کاربر دریافت کنید و مورد استفاده قرار بدین .


Joi

توضیحات اولیه :

این پکیج خیلی محبوبه بین برنامه نویس نود جی اس و به شدت آمار دانلودی خوبیم هم داره که در ادامه بهش اشاره خواهم کرد اما راستش زیاد من ازش خوشم نمیاد :) ترجیحا بیشتر با express-validtor حال میکنم تا به Joi

آمار ارقام :

همون طور در قسمت توضیحات براتون گفتم میبنید که با ۵ میلیون دانلودی در هفته که خودش یک رکورد حساب میشه این پکیج به شدت محبوبیت بالایی داره و اینکه ورژن الان این پکیج ورژن ۱۷ هستش که باندل سایز این پکیج ۵۲۷ کیلوبایت هستش که یکم از نظر من زیاده این موضوع داخل گیت هاب چیزی حدود ۲۰K star داره و اینکه ۲۱۳ نفر توسعه دهنده داره که در حال حاضر وظیفه نگهداری این پکیج برعهده دارند .

نحوه استفاده :

بازم برمیگردیم به مسئله ثبت نام کاربر اینبار میخایم با پکیج Joi اعتبارسنجی مقادیر ورودی رو در دست بگیریم پس شروع میکنیم .

اول با نحوه نصب JOI شروع میکنیم به این شکل میتونیم نصبش کنید .

npm install joi

مثل عادت قبلیمون یک دایرکتوری به اسم validation درست میکنیم و یک فایل به اسم user.js درست میکنیم و به این شکل یک Schema از دیتاهامون درست میکنیم برای اعتبارسنجی همون طور قابل مشاهده هست میتونید اقسام مختلف validation رو داشته باشید اما متاسفانه این پکیج validation موبایل رو نداره پس باید برای اون regex بنوسید :) که میتونید با یک سرچ ساده اموزش regex رو یاد بگیرید .

سپس باید از این Schema استفاده کنید به این شکل :

await checkUserSchema.validateAsync(req.body);

میایم از پکیج JOI تابع validateAsync رو صدا میزنیم و همه ورودی req.body رو بهش پاس میدیم که اگر مشکل چیزی داشته باشه میره به بخش middleware اروری که اپلیکیشن پیاده سازیش کردیم که ارور بسیار تمیزی هم داره که خروجیش به این شکله


Fastest Validator :

توضیحات :

همون طور از اسمش مشاهده میکنید خودشو با المان سرعت معرفی میکنه پس باید انتظار سرعت زیادی باید ازش داشته باشیم و همین طورم هست طبق تست های صورت گرفته شده که در تصویر زیر قابل مشاهده هست از کتابخانه ای که معرفی کردم تقریبا پرسرعت ترهه این یعنی performance بالا در بحث اعتبارسنجی این برای سمت بک اند به شدت قابل درک و مملوس هستش چون منابع کمتر هزینه کمتر .

طبق تصویر نسبت به پکیج JOI پنجاه درصد سریع تره و این فوق العادس :)

آمار و ارقام :

نسبت به دو پکیج که معرفی کردیم در این پست این پکیج تعداد star کمتری در گیت هاب داره با ۲K و تعداد توسعه دهنده هاش هم ۳۳ نفر بیشتر نیستن که برای نگهداری و توسعه روی این پکیج کار میکنند . اما نگاه به ارقام کم گیت هابش نکنید :) استفاده ش کنید ازش لذت میبرید و در نهایت معتادش می شید . :)


تعداد دانلود هفتگیش چیزی حدود ۵ هزارتاست داخل npm و اینکه ورژن ۱.۱۶ هم اکنون در دسترس هستش و باندل سایز این پکیج چیزی حدود ۳۷۶ کیلوبایت هستش که نسبت به JOI خیلی سبک تر هستش .

روش نصب و استفاده

npm i fastest-validator

خب اولین کاری میکنیم نصب این پکیج داخل پروژه مون هست . به این شکل با npm نصبش میکنیم .

به این شکل ما میتونیم Schema خودمون ایجاد کنیم و مقادیر ورودی کاربر رو اعتبارسنجی کنیم

متد compile دو تا خروجی داره یا true بر میگردونه این به این معنی هستش که درست اعتبارسنجی شده و مقادیر ورودی مشکلی ندارند بنا بر قانونی با تصویب کردیم یا ارایه از ارور ها رو بر میگردونه . و این پکیج میتونه تمامی ورودی های موجود مورد اعتبارسنجی قرار بدهد این یعنی دست برنامه نویس به شدت بازهه بتونه هر کاری میخاد انجام بده تا برنامه شو بدون باگ توسعه بدهد . توضیحات بیشتر این پکیج در این لینک داکیومنت خود پکیج مذکور میتونید مشاهده فرمایید .


جمع بندی پایانی

صرفا این مقاله جهت اشنایی شما با این سه پکیج بوده که میتونید با خوندن داکیومنت هر کدوم از پکیج های نام برده در این مقاله به اپشن های بهتری دست پیدا کنید تا ux بهتری به کاربرتون بدید و اینکه امنیت بیشتری به برنامه خودتون .

و در اخر :

این مقاله از سری مقالات هر جمعه من خواهد بود که در مورد تکنولوژی مختلف قراره کلی حرف بزنیم گپ بزنیم نظرات شما باعث دل گرمی من خواهد شد برای تولید محتوای بهتر و باکیفیت تر پس نظر و انتقادی داشتید برام کامنت کنید :) سوالی داشتید بپرسید




nodejsjavascriptvalidationdenoreact
برنامه نویس دون پایه
شاید از این پست‌ها خوشتان بیاید