در سال 2021، جاوا اسکریپت پرکاربردترین زبان برنامه نویسی بود.
جذابیت این فناوری غیرقابل انکار است، همانطور که با تعداد زیادی فریمورک که برنامه نویسی جاوا اسکریپت را فعال می کنند، مشاهده می شود.
Angular، React و Vue در فرانتاند و همچنین Express و Next در باطن وجود دارند که میتوان به چند مورد اشاره کرد.
با بسیاری از چارچوبهای فوقالعاده برای برنامهنویسی باطن در جاوا اسکریپت، ممکن است به این فکر کنید که چرا به جای استفاده از Express یا Next، چیزی متفاوت را جستجو کنم.
شاید لازم باشد که فرآیند توسعه را به سرعت با یک دیگ بخار مناسب شروع کنید، و اضافه کردن دستی نه تنها کنترلرهای جدید، بلکه خدمات نیز شما را بیمار می کند.
یا می خواهید نرم افزار بزرگ و مقیاس پذیری ایجاد کنید که مدیریت آن ساده باشد. یا شاید شما به سادگی می خواهید به شیوه ای کارآمدتر و راحت تر کار کنید.
صرف نظر از اینکه کدام یک در شرایط شما صادق است، Nest.js می تواند راه حل عالی برای نیازهای شما باشد.
این پست بینش های NestJS و همچنین تجربه عملی را ارائه می دهد.
NestJS چیست؟
NestJS یک چارچوب Node مترقی است که منبع باز، قابل گسترش و سازگار است .Js چارچوبی برای ساختن، درگیر کردن و چالش برانگیز بودن سیستم های باطن. اکنون گره ای با سریع ترین نرخ رشد است.
چارچوب TypeScript برای js. NestJS برای ایجاد برنامههایی استفاده میشود که مقیاسپذیر، آزمایشپذیر و بدون اتصال به هم باشند.
مقیاس پذیری را به Node اضافه می کند. سرورهای Js به یک سطح کاملاً جدید منتقل شده اند. PostgreSQL، MongoDB و MySQL از جمله پایگاه های داده پشتیبانی شده هستند.
NestJS قابل توسعه است زیرا می توان از آن با کتابخانه های دیگر استفاده کرد. به دلیل اکوسیستم کاملاً سازگار سازگار با آن، انعطاف پذیر است. و پیشرو است زیرا از ویژگی های جاوا اسکریپت و اصول طراحی پشتیبانی می کند.
اساساً تحت تأثیر Angular، React و Vue است و با تزریق وابستگی داخلی ارائه می شود.
امکانات
- استفاده، یادگیری و تسلط بر آن ساده است.
- رایگان است و منبع باز (مجوز MIT)
- رابط خط فرمان قدرتمند (CLI) برای افزایش بهره وری و توسعه سادگی
- برنامه های تست واحد که استفاده از آنها ساده است
- تایپ اسکریپت، یک زبان با تایپ دقیق که ابر مجموعه ای از جاوا اسکریپت است، استفاده می شود.
- توسعه و نگهداری یک پایگاه کد فعال
- پشتیبانی از صدها ماژول مخصوص آشیانه که ارتباط با فناوریها و ایدههای محبوب مانند TypeORM، Mongoose، GraphQL، لاگ کردن، اعتبارسنجی، ذخیرهسازی، WebSockets و غیره را ساده میکند.
بلوک های سازنده NestJS چیست؟
اجزای سازنده برنامه های Nest در زیر فهرست شده است. موارد دیگری نیز وجود دارد، اما این سه مورد مهم ترین هستند. بیایید به سرعت نگاهی به آنها بیندازیم.
1. کنترل کننده ها
کنترلرها وظیفه پردازش درخواست های دریافتی و پاسخگویی به مشتریان را بر عهده دارند. درخواستهای HTTP خاصی را دریافت میکند و سیستم مسیریابی تعیین میکند که کدام کنترلر کدام درخواست را دریافت کند.
سپس یک پیش نویس مناسب برای ارسال تهیه می کند. با کمک کلاس ها و دکوراتورها یک کلکتور ساده ساخته می شود و هر کنترل کننده مسیرهای مخصوص به خود را برای انجام کارهای مختلف دارد.
2. ارائه دهندگان
ارائه دهندگان یک ایده کلیدی در Nest هستند. بسیاری از کلاسهای اصلی Nest - خدمات، مخازن، کارخانهها، کمککنندگان و غیره - میتوانند به عنوان ارائهدهنده مدیریت شوند.
مفهوم اساسی یک ارائه دهنده این است که می توان آن را به عنوان یک وابستگی تزریق کرد. این نشان میدهد که اشیا میتوانند ارتباطهای مختلفی با یکدیگر ایجاد کنند، و نقش «سیمکشی» نمونههای اشیاء را میتوان عمدتاً به سیستم زمان اجرا Nest برون سپاری کرد.
3. ماژول ها
یک ماژول کلاسی با دکوراتور @Module است که اجزای ساختار برنامه را سازماندهی می کند. هر برنامه دارای یک ماژول ریشه است که برای ساخت نمودار برنامه استفاده می شود، که وابستگی ها و تعاملات بین ارائه دهنده و ماژول را بیشتر حل می کند.
این دکوراتور متادیتا را به Nest.js میدهد تا تشخیص دهد کدام مؤلفهها، کنترلکنندهها یا منابع دیگری در کد برنامه استفاده میشوند و آنها را در یک مجموعه واحد ترکیب میکند.
هر ماژول مجموعه ای از قابلیت ها را دارد که به نوعی به هم مرتبط هستند.
شروع کار با NestJS
1. نصب و راه اندازی
بیایید NestJS را نصب کنیم و با دنبال کردن مراحل زیر با آن پروژه بسازیم:
در نتیجه ساختار دایرکتوری زیر ایجاد می شود:
2. کنترل کننده ها
بلوکهای سازنده Nest، کنترلکنندهها هستند. اینها مکان هایی هستند که درخواست های ورودی در آنها رسیدگی می شود. همانطور که در کد زیر مشاهده می شود، می توانید مسیر مسیر را با استفاده از اصلاح کننده های روش HTTP (دریافت، ارسال، قرار دادن، حذف و غیره) تعیین کنید.
Nestjs از رویکرد دکوراتور استفاده می کند و بیشتر در Typescript توسعه یافته است، اگرچه از جاوا اسکریپت نیز پشتیبانی می کند. همچنین میتوانید از اعتبارسنجی کلاس برای تأیید اعتبار بدنه درخواست استفاده کنید.
من فقط قصد دارم یک نمونه سرور Nestjs بسازم و ValidationPipe را به صورت سراسری اضافه کنم. لوله ها فقط روش هایی هستند که قبل از کنترلرها اجرا می شوند. همچنین میتوان لولهها را در سطح روش/استدلال با استفاده از دکوراتور @UsePipes اعمال کرد.
3. ارائه دهندگان
ارائه دهندگان یکی دیگر از اجزای حیاتی Nestjs هستند. تا حد زیادی، من داده ها را در یک متغیر موقت ذخیره می کردم. به همین دلیل است که چنین کار ساده ای را می توان با استفاده از کنترلرهای کنترلر انجام داد.
با این حال، برای منطق بزرگتر و پیچیده تر، جداسازی کد و استفاده مجدد دشوار خواهد بود. این زمانی است که تامین کنندگان وارد می شوند. شما می توانید با استفاده از دکوراتور @Injectable یک ارائه دهنده را در بالای یک کلاس اعلام کنید/ایجاد کنید. سپس، با استفاده از ارائه دهندگان، می توانید تزریق وابستگی، ورود به سیستم و سایر وظایف را انجام دهید.
4. ماژول ها
ماژول های Nestjs جهانی نیستند. در عوض، آنها عمق دارند.
با این حال، می توان آن را با هر ماژول دیگری نیز به اشتراک گذاشت. اگرچه مانند Angular، ماژولهای جهانی را ارائه میدهد، بهتر است سرویسها/کنترلها را در ماژولی که بیشتر در Nestjs استفاده میشوند، نگه دارید.
NestCLI بیشتر اوقات برای تولید ماژول ها استفاده می شود و ارائه دهندگان/کنترل کننده های تولید شده در زمینه آن ماژول به طور خودکار توسط CLI اضافه می شوند. اینها به عنوان ماژول های ویژگی شناخته می شوند.
5. فیلترهای استثنا
فیلترهای استثنا، کنترلکنندههای خطا هستند که زمانی که یک کنترلر یک استثنا ایجاد میکند، فراخوانی میشوند. به طور خودکار مشکل را مدیریت می کند و یک پیام خطای مناسب و کاربرپسند ارائه می دهد.
بسیاری از استثناهای ارثی HttpException توسط بسته @nestjs/common ارائه میشوند، از جمله NotFoundException، BadRequestException، NotAcceptableException، UnauthorizedException، و بسیاری دیگر. شما حتی می توانید ExceptionFilter خود را طراحی کنید.
6. میان افزار
تابعی که قبل از کنترل کننده مسیر فراخوانی می شود، میان افزار نامیده می شود. اشیاء درخواست و پاسخ، و همچنین تابع میانافزار next () در چرخه درخواست-پاسخ برنامه، برای توابع میانافزار قابل دسترسی هستند.
یک متغیر به نام next معمولا برای شناسایی تابع میان افزار بعدی استفاده می شود. میان افزار سفارشی Nest را می توان در یک متد یا کلاس با استفاده از دکوراتور @Injectable() پیاده سازی کرد.
7. نگهبانان
پاسداران فقط مسئول یک چیز هستند. این مسئولیت آنهاست که ارزیابی کنند که آیا یک درخواست بر اساس شرایط خاص (به ویژه منطق تعریف شده توسط کاربر) توسط کنترل کننده پردازش می شود یا خیر.
برای احراز هویت/مجوز مفید است و روش توصیه شده در Nestjs است.
اگرچه احراز هویت/مجوزها و غیره را میتوان با استفاده از میانافزار انجام داد، اما در سرورهای اکسپرس یا سایر سرورهای HTTP انجام نمیشود، زیرا آنها زمینه قوی مرتبطی ندارند و دلیلی ندارند که بدانند از کدام روش برای پردازش درخواست استفاده میشود.
مزایای
- این چارچوب به شدت به حاشیهنویسیها وابسته است، که برای تولید هر چیزی از نقاط پایانی گرفته تا اسناد Swagger استفاده میشوند. نقاط پایانی اولیه و مرتب هستند و حاشیه نویسی ها به طور کلی توسعه را آسان تر می کنند.
- بیرونی کردن ماژول های همه منظوره و استفاده مجدد از کد در بسیاری از پروژه ها ساده است زیرا Nest.js یک چارچوب مبتنی بر ماژول است.
- ساختار پوشه Nest.js به طور قابل توجهی تحت تأثیر Angular است. هنگام طراحی یک سرویس Nest، این امکان را برای حداقل زمان خرابی فراهم می کند.
- کامپوننت ها دایرکتوری های مخصوص به خود را دارند که ریشه شامل ماژول برنامه و فایل اصلی است. به دلیل سادگی ساختار، می توان به طراحی نقاط پایانی و مشتریان آنها توجه بیشتری کرد تا ساختار برنامه.
- Nest، مانند Angular، یک ابزار خط فرمان خوب، Nestjs/cli را ارائه میکند که از طریق Node Package Manager در دسترس است.
معایب
- Nest از نظر استفاده از TypeScript و ادغام Angular یک مزیت دارد، اما فاقد حمایت مالی یک شرکت بزرگ است.
- فقدان مستندات بزرگترین تهدید را برای کاربران Nest ایجاد می کند. اگرچه این چارچوب تعامل بسیار خوبی با سایر چارچوبها دارد، مستندات پراکنده هستند و هیچ مشکل احتمالی را بررسی نمیکنند.
- Nest از نظر استفاده از TypeScript و Angular یک مزیت دارد.
نتیجه
NestJS پیشرفت بزرگی را برای توسعه دهندگان فراهم می کند. برای شروع توسعه، تنها کاری که باید انجام دهید این است یک برنامه جدید ایجاد کنید و شما خوب هستید که بروید این چارچوب فوراً تقویت قابل توجهی را ارائه می دهد، در حالی که همچنین با ایجاد یک معماری برنامه مناسب به شما در انجام مراحل اضافی کمک می کند.
از روشها و فناوریهای پیشرفته برای تولید برنامههایی که هم قابل مدیریت و هم ماندگار هستند استفاده میکند. می توان از آن برای اتصال به GraphQL، WebSockets و ساخت میکروسرویس استفاده کرد.
پاسخ دهید