چند مفهوم اصلی در  NestJS

چند مفهوم اصلی در NestJS

cNestJS، یک فریم ورک  پیشرو Node.js  که به دلیل رویکرد خود در ساخت برنامه های کاربردی کارآمد، قابل اعتماد و مقیاس پذیر در سمت سرور محبوبیت پیدا کرده است. NestJS با استفاده از قدرت TypeScript و ترکیب عناصر برنامه نویسی شی گرا (OOP)، برنامه نویسی تابعی (FP) و برنامه نویسی واکنشی عملکردی (FRP)، یک پلتفرم قوی برای ساخت کارهای پیچیده ارائه می کند.

در این مقاله، به پنج مفهوم اصلی  که  NestJS را تشکیل می‌دهند، خواهیم پرداخت: 

Controllers, Providers, Modules, Middleware, and Exception Filters

 

Controllers:

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

برای ایجاد یک کنترلر در NestJS، از  دکوریتور  Controller  در سطح کلاس استفاده می کنیم. این دکوراتور نه تنها کلاس را به عنوان یک کنترلر علامت گذاری می کند، بلکه به ما امکان می دهد مسیر اصلی را که این کنترلر انجام می دهد را مشخص کنیم. در اینجا یک مثال ساده آورده شده است:


در این مثال ما  CategoriesController را ساختیم تا  رسیدگی  کنیم به  درخواست های  مسیر /v1/categories  و دکوریتور  Get برای اتصال متد  getAllCategories با درخواست های Get استفاده کردیم  و در نتیجه اگر هنگامی که یک درخواست GET به '/v1/categories ' ارسال می شود، متد  getAllCategories  فراخوانی می شود و  نتیجه مورد نظر را برمی گرداند.

کنترلرها می توانند چندین مسیر را مدیریت کنند و از همه روش های HTTP پشتیبانی کنند.آنها همچنین می توانند ارائه دهندگان را (که بعداً در مورد آنها صحبت خواهیم کرد) برای مدیریت عملیات پیچیده مانند دسترسی به پایگاه داده یا فراخوانی APIهای خارجی تزریق کنند. در اصل، کنترل‌کننده‌ها در NestJS سازمان‌دهنده برنامه شما هستند، درخواست‌های دریافتی را به سمت کنترل‌کننده‌های مناسب هدایت می‌کنند و از دریافت پاسخ صحیح مشتری اطمینان می‌دهند.

 

Providers:

Providers  یکی از مفاهیم اساسی در NestJS هستند. آنها اغلب برای کپسوله کردن منطق پیچیده استفاده می شوند که امکان ماژولار بودن و آزمایش بهتر را فراهم می کند. Providers  می توانند خدمات، مخازن، کارخانه ها، کمک کنندگان و غیره باشند.

در NestJS، یک Providers    کلاسی است که با  دکوریتور  Injectable  تزئین شده است. این دکوریتور   به NestJS اجازه می دهد تا چرخه حیات کلاس را مدیریت کند و آن را به عنوان یک وابستگی در صورت نیاز تزریق کند. در اینجا یک مثال از یک Providers  ساده آورده شده است:

در مثال بالا  AppService یک  Providers   هست که دارای یک متد  getHello هست و از آنجایی که AppService  با Injectable  تزئین شده است، می توان آن را به قسمت های دیگر برنامه مانند کنترلرها یا سایر Providers    تزریق کرد.

Providers     بخش مهمی از سیستم قدرتمند تزریق وابستگی (DI) NestJS هستند. وقتی یک کلاس به یک Providers     وابسته است، نیازی به دانستن نحوه ایجاد آن Providers    یا مدیریت چرخه حیات آن نیست. در عوض، به سادگی اعلام می‌کند که به Providers    نیاز دارد و NestJS از بقیه مراقبت می‌کند. این منجر به کدهای ماژولارتر و قابل آزمایش تر می شود.

در اینجا نمونه ای از یک کنترلر است که به AppService  بستگی دارد:

در این مثال، AppController اعلام می کند که به AppService  در سازنده خود نیاز دارد. NestJS به طور خودکار یک نمونه از AppService ایجاد می کند و زمانی که نمونه ای از AppController  را ایجاد می کند آن را به سازنده ارسال می کند. متد  AppService  می‌تواند هنگام رسیدگی به درخواست GET به '/' فراخوانی شود.

Providers    ابزار قدرتمندی برای سازماندهی منطق برنامه شما و ایجاد کدهای ماژولارتر و قابل آزمایش تر هستند. در بخش بعدی، مفهوم کلیدی دیگری را در NestJS بررسی خواهیم کرد: ماژول ها.

 

Modules:

ماژول ها یک عنصر سازمان دهی  کلیدی در برنامه های NestJS هستند.آنها راهی برای گروه بندی اجزای مرتبط مانند کنترلرها، ارائه دهندگان و سایر ماژول ها در زیر مجموعه های منطقی و عملکردی ارائه می دهند.این گروه‌بندی مدیریت و مقیاس‌بندی برنامه‌های بزرگ را آسان‌تر می‌کند.

یک ماژول با استفاده از دکوریتور  Module در سطح کلاس تعریف می شود. این دکوراتور یک شی را می گیرد که می تواند دارای ویژگی هایی برای imports ، controllers ، providers ، exports   باشد.

. در اینجا مثالی از یک ماژول ساده آورده شده است: 

در این مثال، MyModule ماژولی است که شامل MyController و MyService است. این بدان معناست که MyController و MyService بخشی از یک واحد عملکردی هستند و به راحتی می توان آنها را با هم مدیریت کرد.

آرایه imports  برای وارد کردن ماژول های دیگر استفاده می شود و به ماژول فعلی اجازه می دهد تا از providers   صادر شده خود استفاده کند.آرایه providers  برای تعریف providers استفاده می‌شود که توسط تزریق‌کننده Nest نمونه‌سازی می‌شوند و ممکن است حداقل در این ماژول به اشتراک گذاشته شوند. آرایه controllers   برای فهرست کردن controllers  ماژول استفاده می‌شود که باید در زمینه این ماژول نمونه‌سازی شوند. آرایه exports  برای صادرات providers  استفاده می شود و آنها را در دسترس سایر ماژول ها قرار می دهد.

ماژول ها ابزار قدرتمندی برای سازماندهی برنامه NestJS شما و مدیریت وابستگی ها بین بخش های مختلف برنامه شما هستند. آنها encapsulation  را ترویج می کنند، سازماندهی کد را بهبود می بخشند، و جداسازی و قابلیت استفاده مجدد ماژول را افزایش می دهند.

 

Middleware:

Middleware  در NestJS تابعی است که قبل از کنترلر مسیر فراخوانی می شود. توابع Middleware به شی درخواست (req)، شی پاسخ (res) و تابع () next در چرخه درخواست-پاسخ برنامه دسترسی دارند. تابع ()next تابعی در روتر Express است که با فراخوانی، Middleware جایگزین Middleware  فعلی را اجرا می‌کند.

توابع Middleware می توانند وظایف زیر را انجام دهند:

  • هر کدی را اجرا کنید.
  • تغییراتی در درخواست و  پاسخ ایجاد کنید.
  • چرخه درخواست-پاسخ را پایان دهید.
  • توابع Middleware  بعدی  را در پشته فراخوانی کنید.

در اینجا نمونه ای از Middleware  ساده در NestJS آمده است:


در این مثال، LoggerMiddleware یک Middleware   است که متد درخواست و URL را  لاگ  میگیرد  و سپس next() را فراخوانی می کند تا کنترل را به تابع Middleware    بعدی منتقل کند.

برای استفاده از  Middleware روش های مختلفی وجود دارد یکی ازآن ها  روش زیر می باشد:

در این مثال، LoggerMiddleware برای تمام مسیرهایی که توسط MyController اداره می شود اعمال می شود.

Middleware یک ابزار قدرتمند در NestJS برای انجام کارهای رایج مانند ثبت‌نام، اعتبارسنجی و مدیریت خطا و ..  است.

 

Exception Filters:

Exception Filters در NestJS ابزار قدرتمندی برای مدیریت  Exception در کل برنامه شما یا زیر مجموعه ای از آن هستند. آنها بخشی از لایه استثنای NestJS هستند. Exception Filters  توابعی هستند که Exception   پرتاب شده از کنترلرهای برنامه شما را می گیرند و سپس آنها را به نوعی پردازش می کنند.

در اینجا یک مثال از یک Exception Filters ساده آورده شده است:

در این مثال، ErrorFilter یک Exception Filters  است که تمام موارد خطا را می گیرد. هنگامی که یک Error پرتاب می شود، متد catch() فراخوانی می شود و یک پاسخ JSON با پیام خطا و برخی جزئیات اضافی ارسال می کند.

برای اعمال فیلتر، می‌توانید از دکوراتور UseFilters در سطح متد یا کنترلر یا گلوبال  استفاده کنید:

در مثال در سطح گلوبال استفاده کردیم.

Exception Filters ابزار قدرتمندی برای مدیریت و متمرکز کردن مدیریت خطا در برنامه NestJS شما هستند. آنها راهی برای رسیدگی به Exception به روشی تمیز و آسان ارائه می دهند.

 

نتیجه گیری:

در این مقاله، ما پنج مفهوم اصلی را که زیربنای چارچوب NestJS هستند بررسی کرده‌ایم: Controllers، Provider، Modules، Middleware و Exception Filters. هر یک از این مفاهیم نقش مهمی در توسعه برنامه های کاربردی مقیاس پذیر، قابل نگهداری و کارآمد در سمت سرور دارند. Controllers به عنوان دروازه‌بان برنامه شما عمل می‌کنند، درخواست‌های دریافتی را مدیریت می‌کنند و پاسخ‌ها را برمی‌گردانند. Provider  منطق پیچیده را محصور می کنند و ماژولار بودن و آزمایش پذیری را ارتقا می دهند. ماژول ها اجزای مرتبط را در زیرمجموعه های منطقی گروه بندی می کنند و مدیریت و مقیاس برنامه شما را آسان تر می کنند. توابع Middleware  قبل از کنترل‌کننده مسیر فراخوانی می‌شوند و به شما امکان می‌دهند هر کدی را که مستقیماً به درخواست مشتری پاسخ نمی‌دهد، اجرا کنید. در نهایت، Exception Filters ابزار قدرتمندی برای مدیریت استثناها در سراسر برنامه شما فراهم می کند.

با درک این مفاهیم، ​​می توانید از قدرت کامل   NestJS استفاده کنید و برنامه های کاربردی قوی و درجه یک سازمانی ایجاد کنید.   به یاد داشته باشید که اینها فقط مفاهیم اساسی هستند. NestJS بسیاری از ویژگی‌ها و تکنیک‌های پیشرفته‌تر را ارائه می‌کند که با راحت‌تر شدن با آن ، می‌توانید آن‌ها را بررسی کنید.

 

امیدوارم  این مطالب کمی بهتون کمک کرده باشه:)

مهدیار جعفری

 

 

 

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس