خودآموز سریع NestJS - قسمت اول

آموزش سریع NestJS | معراج پارسا
آموزش سریع NestJS | معراج پارسا

سلام رفقا
اگه شما هم مثل من عاشق برنامه‌ نویسی هستید و دوست دارید تو دنیای وب پیشرفت کنید ، NestJS می‌تونه یه انتخاب فوق‌ العاده باشه . امروز می‌خوایم قدم به قدم یاد بگیریم چطوری با NestJS برنامه‌های وب حرفه‌ای بسازیم. آماده‌اید؟ پس بریم سراغش

اگه هنوز نمیدونی NestJS چیه و به چه دردی میخوره این مقاله رو بخون



مقدمه و شروع کار

توی مقاله قبلی راجع به اینکه NestJS چیه مفصل صحبت کردیم ولی برای کسایی که حال خوندنشو ندارن یه توضیح میدم :)))
NestJS یه فریم‌ورک مدرن و قدرتمنده که بر پایه Typescript و JavaScript ساخته شده که با استفاده از ساختار ماژولار و تزریق وابستگی، توسعه برنامه‌های بزرگ و پیچیده رو خیلی راحت‌تر می‌کنه . حالا بریم ببینیم چطوری می‌تونیم NestJS رو نصب و راه‌اندازی کنیم

نصب NestJS CLI

برای شروع کار، باید NestJS CLI رو نصب کنیم . این ابزار خط فرمان کمک می‌کنه تا پروژه‌های جدید بسازیم و کارهای مختلف رو انجام بدیم . برای نصبش، کافیه دستور زیر رو تو خط فرمان وارد کنید :

npm install -g @nestjs/cli

ایجاد پروژه جدید

بعد از نصب CLI می‌تونید یه پروژه جدید بسازید . برای این کار، دستور زیر رو وارد کنید و به جای project-nameاسم پروژه خودتون رو بذارید :

nest new project-name

این دستور یه پروژه جدید با ساختار پیش‌فرض می‌سازه و ازتون می‌پرسه که از npm یا yarn برای مدیریت بسته‌ها استفاده کنید . بعد از انتخاب CLI همه وابستگی‌ها رو نصب می‌کنه و پروژه آماده استفاده می‌شه.

ساختار پروژه و اجزا

ساختار پروژه تو NestJS خیلی مهمه . اگه درست درکش کنید ، می‌تونید کدهای تمیزتر و قابل نگهداری‌تری بنویسید . وقتی یه پروژه جدید می‌سازید ، یه سری پوشه‌ها و فایل‌های استاندارد بهتون داده می‌شه . پوشه src شامل همه کدهای اصلی پروژه‌تونه . فایل‌هایی مثل main.ts و app.module.ts هم تو این پوشه هستن

  • ماژول‌ها

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

nest generate module users

این دستور یه فایل ماژول جدید با نام users.module.ts تو پوشه src می‌سازه


  • کنترلرها

کنترلرها در واقع کلاس‌هایی هستن که با استفاده از دکوریتور @Controller تعریف می‌شن و متدهای اونا مسیرهای مختلف رو مدیریت می‌کنن . در واقع کنترلرها تو NestJS مسئول مدیریت درخواست‌های HTTP و ارسال پاسخ‌ها هستن . اونا نقش پل بین سرویس‌ها و کاربران رو ایفا می‌کنن . برای ایجاد یه کنترلر جدید ، می‌تونید از دستور زیر استفاده کنید :

nest generate controller users

این دستور یه فایل کنترلر جدید با نام users.controller.ts ایجاد می‌کنه

کنترلرها از متدهای مختلفی برای مدیریت درخواست‌های HTTP استفاده می‌کنن مثل Get - Post - Delete - Put و Patch که هر کدوم از این متدها برای مدیریت نوع خاصی از درخواست HTTP به کار می‌رن


  • سرویس‌ها

سرویس‌ها هم کلاس‌هایی هستن که با استفاده از دکوریتور @Injectable تعریف می‌شن و قابلیت تزریق وابستگی دارن . سرویس‌ها تو NestJS نقش مهمی در منطق تجاری برنامه دارن . اونا برای پردازش داده‌ها و انجام عملیات مختلف استفاده می‌شن . برای ایجاد یه سرویس جدید، می‌تونید از دستور زیر استفاده کنید :

nest generate service users

این دستور یه فایل سرویس جدید با نام users.service.ts ایجاد می‌کنه


استفاده از سرویس در کنترلر

برای استفاده از یه سرویس در کنترلر، باید اونو به کنترلر تزریق کنید . این کار با استفاده از سازنده کلاس کنترلر انجام می‌شه . کد زیر رو ببینید :

import { Controller, Get } from '@nestjs/common';
import { UsersService } from './users.service';

@Controller('controller-name')
export class ControllerNameController {
  constructor(private readonly userService: UsersService) {}

  @Get()
  findAll() {
    return this.userService.findAll();
  }
}

خوب دقت کنین بچه ها ما الان یه کنترلر داریم که توش درخواست Get رو مدیریت کردیم . هربار درخواست Get ارسال بشه تابع findAll از سرویس کاربران یعنی همون usersService فراخوانی میشه . حالا این سرویس رو چطور متصل کردیم به کنترلرمون ؟ خب معلومه ، توی متد سازنده سرویس رو تزریق کردیم به کنترلر . به همین سادگی ، به همین زیبایی :/


پایگاه داده

همونطور که میدونید اتصال به پایگاه داده و انجام عملیات CRUD یکی از بخش‌های مهم تو برنامه‌نویسی وب هست . تو NestJS، می‌تونید از TypeORM برای این کار استفاده کنید .

نکته : TypeORM یه ORM (Object-Relational Mapping) هست که به شما کمک می‌کنه با پایگاه داده به شیوه‌ای شیءگرا کار کنید

برای اتصال به پایگاه داده ، اول باید پکیج‌های مورد نیاز رو نصب کنید :

npm install --save @nestjs/typeorm typeorm pg

بعدش تو فایل app.module.ts، اتصال به پایگاه داده رو پیکربندی کنید :

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'test',
      password: 'test',
      database: 'test',
      entities: [__dirname + '/../**/*.entity{.ts,.js}'],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

حالا که همه چیز آماده شد باید برای انجام عملیات CRUD ، اول یه Entity ایجاد کنید :

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  age: number;
}

بعدش می‌تونید از ریپوزیتوری‌ها برای انجام عملیات مختلف استفاده کنید . مثلا ما اینجا توی همون تابع findAll که تو سرویس کاربران بود میخوایم استفاده کنیم :

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private readonly userRepository: Repository<User>,
  ) {}

  findAll(): Promise<User[]> {
    return this.userRepository.find();
  }
}

به همین سادگی تونستیم لیست کاربران رو از دیتابیس برگردونیم .




جمع بندی

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

  • گاردها و میان‌افزارها
  • فیلترها و پایپ‌ها
  • آزمایش و تست‌نویسی
  • تزریق وابستگی (Dependency Injection)
  • بهینه‌سازی و بهترین شیوه‌ها


تمرین یادتون نره . خوشحال می‌شم نظرات و تجربیاتتون رو در مورد NestJS باهام به اشتراک بذاری

مخلصیم:)