خیلی مهمه که بتونی برنامه ای تولید کنید که بتونید ورودی های کاربر رو اعتبار سنجی بکنید . خیلی وقت ها باگ های برنامه های سمت وب سر این به وجود میاد مقدار ورودی کاربر اعتبار سنجی نشده وارد دیتابیس شده و اینگونه میشه یک سری باگ ها پیش میاد . در ادامه این مقاله قصد اینو دارم چند نوع روش اعتبارسنجی کتابخانه های مهم که در همین راستا توسعه داده شدند بهتون معرفی کنم این نکته هم بهتون بگم پکیج های معرفی شده در سه بخش توضیحات اولیه - آمار نصب - نحوه چگونگی استفاده مورد برسی قرار خواهند گرفت . پس در ادامه با من همراه باشید .
کمتر کسی هست نود جی اس کار کرده باشه با این پکیج کار نکرده باشه یا حداقل اسمشو نشنیده باشه . از نظر من بهترین پکیج اعتبارسنجی در نود جی اس همین پکیج هستش که در ادامه توضیح خواهم داد چرا ! پس پنیک نکنید :)
خب همون طور دارید مشاهده می کنید با تعداد ۳۲۹ هزار تا دانلودی در هفته در 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 میکنیم این حرکتو .
خب بقیش هم مشخصه براتون توضیح خاصی نداره فقط
سپس برای اینکه داخل controller مون بتونیم ازش استفاده کنیم بهترین روش اینکه یک middleware بسازیم به اسم validation و به این شکل ارور ها رو نمایش بدیم .
میایم از پکیج express-validator مقدار validation result میگیریم سپس میایم یک یک تابع بر اساس شرایط middleware express مینویسیم که اینجا میاد اروری های از سمت request میاد رو میگیره و هر کدوم رو مشخص میکنه برای کدوم قسمته که بعد هم میایم نمایش میدیم یا اینکه اگر اروری وجود نداشت به مرحله بعد میریم .
و سپس داخل Route های که میخایم validation صورت بگیره به این شکل مورد استفاده قرارش میدیم .
اینجا اول اومدیم تابع validation رو که خودمون نوشتیم رو صدا میزنیم سپس میایم از middleware checkvalidation استفاده میکنیم البته این به صورت لوکاله همون طور میدونید شما میتونید middleware ها رو به صورت گلوبال هم تعریف کنید که دیگه این دردسر ها نداشته باشید که پیشنهاد میکنم از این روش استفاده کنید بهترین روش هم هست .
خب یک معجزه رخ داد :) شما الان میتونید با خیال راحت دیتا رو از سمت کاربر دریافت کنید و مورد استفاده قرار بدین .
این پکیج خیلی محبوبه بین برنامه نویس نود جی اس و به شدت آمار دانلودی خوبیم هم داره که در ادامه بهش اشاره خواهم کرد اما راستش زیاد من ازش خوشم نمیاد :) ترجیحا بیشتر با 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 اروری که اپلیکیشن پیاده سازیش کردیم که ارور بسیار تمیزی هم داره که خروجیش به این شکله
همون طور از اسمش مشاهده میکنید خودشو با المان سرعت معرفی میکنه پس باید انتظار سرعت زیادی باید ازش داشته باشیم و همین طورم هست طبق تست های صورت گرفته شده که در تصویر زیر قابل مشاهده هست از کتابخانه ای که معرفی کردم تقریبا پرسرعت ترهه این یعنی performance بالا در بحث اعتبارسنجی این برای سمت بک اند به شدت قابل درک و مملوس هستش چون منابع کمتر هزینه کمتر .
طبق تصویر نسبت به پکیج JOI پنجاه درصد سریع تره و این فوق العادس :)
نسبت به دو پکیج که معرفی کردیم در این پست این پکیج تعداد star کمتری در گیت هاب داره با ۲K و تعداد توسعه دهنده هاش هم ۳۳ نفر بیشتر نیستن که برای نگهداری و توسعه روی این پکیج کار میکنند . اما نگاه به ارقام کم گیت هابش نکنید :) استفاده ش کنید ازش لذت میبرید و در نهایت معتادش می شید . :)
تعداد دانلود هفتگیش چیزی حدود ۵ هزارتاست داخل npm و اینکه ورژن ۱.۱۶ هم اکنون در دسترس هستش و باندل سایز این پکیج چیزی حدود ۳۷۶ کیلوبایت هستش که نسبت به JOI خیلی سبک تر هستش .
npm i fastest-validator
خب اولین کاری میکنیم نصب این پکیج داخل پروژه مون هست . به این شکل با npm نصبش میکنیم .
به این شکل ما میتونیم Schema خودمون ایجاد کنیم و مقادیر ورودی کاربر رو اعتبارسنجی کنیم
متد compile دو تا خروجی داره یا true بر میگردونه این به این معنی هستش که درست اعتبارسنجی شده و مقادیر ورودی مشکلی ندارند بنا بر قانونی با تصویب کردیم یا ارایه از ارور ها رو بر میگردونه . و این پکیج میتونه تمامی ورودی های موجود مورد اعتبارسنجی قرار بدهد این یعنی دست برنامه نویس به شدت بازهه بتونه هر کاری میخاد انجام بده تا برنامه شو بدون باگ توسعه بدهد . توضیحات بیشتر این پکیج در این لینک داکیومنت خود پکیج مذکور میتونید مشاهده فرمایید .
جمع بندی پایانی
صرفا این مقاله جهت اشنایی شما با این سه پکیج بوده که میتونید با خوندن داکیومنت هر کدوم از پکیج های نام برده در این مقاله به اپشن های بهتری دست پیدا کنید تا ux بهتری به کاربرتون بدید و اینکه امنیت بیشتری به برنامه خودتون .
این مقاله از سری مقالات هر جمعه من خواهد بود که در مورد تکنولوژی مختلف قراره کلی حرف بزنیم گپ بزنیم نظرات شما باعث دل گرمی من خواهد شد برای تولید محتوای بهتر و باکیفیت تر پس نظر و انتقادی داشتید برام کامنت کنید :) سوالی داشتید بپرسید