در این مقاله از وبسایت دِواندیش قصد داریم شما را با فریمورک NestJs آشنا کنیم .پس با ما تا پایان این مقاله همراه باشید.در ابتدا، باید بدانیم فریمورک NestJS دقیقا چیست؟
فریمورک NestJS بر پایه Node.js برای توسعه سیستم های بزرگ و چالش برانگیز است. با استفاده از این فریمورک، شما میتوانید برنامه های مقیاس پذیر و آزمایش پذیر را در چارچوبی مشخص و ساختاری بسیار مناسب ایجاد کنید.فریمورک nestjs به طور قابل توجهی تحت تأثیر Angular است و یکی از ویژگی های مهم آن، dependency injection می باشد؛ این ویژگی، امکان تزریق یک ماژول به ماژول دیگر را فراهم میکند و استفاده مجدد از کد را بسیار بهینه میکند. چرا باید از فریمورک nestjs استفاده کنیم؟
به عنوان یک توسعه دهنده Node.js، باید بدانیم که انتخاب فریمورک مناسب برای هر پروژه ای در موفقیت آن بسیار مهم است. در حالی که Express.js برای سال ها استاندارد واقعی برای ساخت برنامه های وب با Node.js بوده است، حال بیایید به این بپردازیم که چرا باید برای پروژه بعدی خود از NestJS استفاده کنید:1. استفاده از Typescript
فریمورک NestJs بر پایه ی TypeScript ساخته شده است. این موضوع به توسعه دهندگان اجازه میدهد تا کدهای بسیار تمیزتر و مختصرتر بنویسند و تشخیص خطا را بسیار ساده کرده و همچنین درک و توسعه کد را در طول زمان آسانتر میکند.2. معماری ماژولار فریمورک nestjs
فریمورک nestjs بر اساس معماری ماژولار ساخته شده است که سازماندهی و مقیاس بندی برنامه های بزرگ را آسان میکند. این فریمورک مجموعه ای شامل Provider ،Controller و Module را برای ایجاد یک ساختار ماژولار بکار میگیرد که به راحتی قابل مدیریت است.3. تزریق وابستگی (Dependency Injection)
فریمورک nestjs از تزریق وابستگی (DI) برای مدیریت جریان وابستگی ها بین ماژول ها استفاده نموده که این امر تست و نگهداری کد را آسان تر میکند؛ زیرا به شما این امکان را میدهد تا اجزای پروژه خود را جدا کرده و آنها را به صورت مجزا آزمایش کنید.4. اعتبارسنجی داخلی
فریمورک nestjs دارای قابلیت اعتبارسنجی داده های ورودی است که در زمان ساخت APIها بسیار مفید خواهد بود. این فریمورک تعریف و اجرای قوانین اعتبارسنجی را آسان و احتمال بروز خطا را کاهش میدهد.5. پشتیبانی از وبسرویس های مختلف
فریمورک nestjs از وبسرویس های بسیار زیادی پشتیبانی میکند؛ از جمله این موارد میتوان به پشتیبانی از GraphQL ،WebSockets و Microservices اشاره کرد. این امر ساخت برنامه های کاربردی جدیدی را که نیاز به ارتباطات realTime (بلادرنگ) یا معماری میکروسرویس دارند را آسان میکند.6. جامعه برنامه نویسان فعال
فریمورک nestjs دارای یک جامعه فعال و رو به رشد از توسعه دهندگان است که در فرایند توسعه، مستندسازی و پشتیبانی این فریمورک مشارکت دارند. این بدان معنی است که شما میتوانید برای به روز ماندن در دنیای برنامه نویسی و توسعه با ساختار مناسب به این فریمورک تکیه کنید.در حالی که Express.js هنوز یک فریمورک محبوب و پر کاربرد برای ساخت برنامه های وب با Node.js است، NestJS طیف وسیعی از مزایا و ویژگی های اضافی را ارائه میدهد که میتواند به شما در ساخت برنامه های مقیاس پذیر، قابل توسعه و مطمئن تر کمک کند. چه در حال ساخت یک پروژه کوچک چه درحال توسعه ی یک برنامه سازمانی در مقیاس بزرگ باشید، NestJS قطعا ارزش بررسی و استفاده را دارد.مفاهیم پایه NestJS
مفهوم Decroator
دکوراتور عبارتی در تایپ اسکریپت است که سه ورودی 'هدف (Target)'، 'نام' و 'توصیف گر ویژگی (Property Descriptor)' را پذیرفته و یک تابع را برخواهد گرداند. شما میتوانید دکوراتورها را با قرار دادن کاراکتر @ و سپس نام دکوراتور در بالای هر چیزی که میخواهید، فراخوانی کنید. به طور مثال، سه دکوراتور مختلف مانند 'کلاس (@Controller())'، 'متد (@Get())' یا 'آرگومان (@Body())' وجود دارد.import { createParamDecorator, ExecutionContext } from "@nestjs/common";
export const User = createParamDecorator((data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return request.user;
})
در فریمورک nestjs همه چیز را میتوان با دکوراتورها کنترل کرد. میتوانید یک کنترلر را به مجموعه ای از مسیرها (Route) متصل نمایید، نوع درخواست مانند Post یا Get یا ... را مشخص کنید، اطلاعات و Body درخواست را دریافت کرده و یا پارامترهای درخواست را از هم جدا کنید. شما همچنین میتوانید دکوراتورهای سفارشی برای استفاده در پروژه خود را ایجاد کنید. به طور مثال:مفهوم Controller
کنترلر ها درخواست های دریافتی را مدیریت کرده و پاسخ ها را به کلاینت برمیگردانند. شما میتوانید یک URL را به عنوان مسیر اصلی برای یک کنترلر مشخص کرده و با دادن دکوراتور به متدهای درون آن مانند @Put ،@Post ،Get@، یا @Delete، مسیردهی آن کنترلر را مشخص کنید؛ درست مانند کد زیر:import { Controller, Get } from "@nestjs/common";
@Controller("blogs")
export class BlogController {
@Get()
findAll(): string {
return "This actions return all devandish blogs.";
}
}
مفهوم Provider
Provider ها یک مفهوم مهم در NestJs هستند. کلاسهای اصلی Nest، مانند سرویس ها (دسترسی به داده ها و منطق برنامه)، Repository (کنترل دسترسی به پایگاه داده)، Factory و غیره را میتوان به عنوان Provider در نظر گرفت. در Nest امکان ساخت Provider های جدید و تزریق آنها به کنترلرها یا @Injectable از نوع سرویس، با دکوراتور Provider های دیگر وجود دارد. به عنوان مثال، یک Provider با @Injectable مشخص میشود؛ این دکوراتور اعلام میکند که این سرویس میتواند توسط مدیریت شود. Nest Inversion Of Control(IoC) تعاملات بین Provider ها را برعهده دارد. برای درک بهتر Provider ها، به نمونه کد زیر دقت کنید:import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { UserEntity } from "src/modules/user/entities/user.entity";
import { Repository } from "typeorm";
@Injectable()
export class UserService {
constructor(
@InjectRepository(UserEntity) private userRepository: Repository<UserEntity>
){}
async login(username: string, password: string): Promise<UserEntity> {
return await this.userRepository.findOneBy({
username,
password
})
}
}
ماژول ها nestjs
بخش اصلی پروژهای توسعه داده شده با NestJs , ماژول ها هستند. هنگام ایجاد یک برنامه NestJs، یک ماژول اولیه با نام AppModule در پروژه قرار میگیرد. همچنین به طور کلی، برای چیدمان منظم اجزای برنامه، هر قسمت را به یک ماژول تبدیل خواهیم کرد؛ به طور مثال، در یک پروژه بلاگ، قسمت کاربران، احراز هویت، پست ها و کامنت ها هر کدام یک ماژول جداگانه خواهند بود. ما میتوانیم به هر ماژول کنترلرها و سرویس های مدنظر خود را اضافه کنیم.گاردها (Guard)
در Express ما برای اینکه بتوانیم یک کاربر را احراز هویت و سطح دسترسی آن را مشخص کنیم، از Middleware ها استفاده میکردیم. حال، در NestJS گاردها چاره ی کار هستند.با استفاده از گاردها می توان برای یک مسیر یا Endpoint شرط دسترسی قرار داد. به طور مثال می توانیم برای یک اندپوینت، یک گارد برای چک کردن توکن احراز هویت کاربر قرار دهیم؛ اگر توکن معتبر بود کاربر میتواند از گارد عبور کند و در غیر این صورت، گارد خطای مربوطه را به عنوان پاسخ به سمت کلاینت برمیگرداند و چرخه ی درخواست متوقف میشود.جمع بندی
همانطور که دیدید، به نظر میرسد که Nest همه چیز را یکجا دارد؛ سریع است، چرخ را دوباره اختراع نمیکند، از همه ابزارها و فن آوری ها و معماری های محبوب پشتیبانی میکند و از همه مهمتر، ساختار منظم ومنسجمی را ارائه میدهد.پس اگر هنوز یادگیری این فریمورک قدرتمند را شروع نکرده اید، پیشنهاد میکنیم که به مستندات آن مراجعه و وارد دنیای جذاب NestJS شوید.نظر شما در مورد این فریمورک محبوب چیست؟ آیا تجربه ی استفاده از آن را دارید؟ نظرات و تجربه ی خود را با ما به اشتراک بگذارید.