<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mearaj.Parsa</title>
        <link>https://virgool.io/feed/@meerajparsa</link>
        <description>مدرس  و توسعه دهنده وب . بیست چاری در حال آموزش دیدن</description>
        <language>fa</language>
        <pubDate>2026-06-10 12:33:21</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2348855/avatar/SlY37j.jpg?height=120&amp;width=120</url>
            <title>Mearaj.Parsa</title>
            <link>https://virgool.io/@meerajparsa</link>
        </image>

                    <item>
                <title>احراز هویت در NestJS</title>
                <link>https://virgool.io/backend-community/%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-%D8%AF%D8%B1-nestjs-lq0soduex2ie</link>
                <description>آموزش NestJS | معراج پارساسلام دوستان امروز می‌خوایم به صورت مفصل راجع به احراز هویت توی NestJS صحبت کنیم . امنیت تو برنامه‌های وب یکی از مهم‌ترین مسائله و احراز هویت نقش کلیدی توی این زمینه داره . تو این پست یاد می‌گیریم چطور با استفاده از NestJS یه سیستم احراز هویت قوی و کارآمد بسازیم . پس آماده‌اید؟ بریم سراغشاگه نمیدونی NestJS چیه :NestJS یکی از فریم‌ورک‌های جذاب برای توسعه‌ی برنامه‌های سمت سروره ، دوس داری بیشتر باهاش آشنا بشی ؟ این پست رو ببین و اگه خواستی سریع یادش بگیری و اولین برنامه خودتو ایجاد کنی قسمت اول و قسمت دوم رو ببینمفاهیم پایه‌ای احراز هویتقبل از اینکه بریم سراغ کد، لازمه یه سری مفاهیم پایه‌ای رو مرور کنیم. احراز هویت (Authentication) فرآیند تأیید هویت کاربره. بعد از تأیید هویت، می‌تونیم از مجوزدهی (Authorization) برای تعیین سطح دسترسی کاربر استفاده کنیم.احراز هویت مبتنی بر Tokenیکی از رایج‌ترین روش‌های احراز هویت تو برنامه‌های وب، استفاده از توکن‌هاست. JWT (JSON Web Token) یکی از محبوب‌ترین استانداردها برای این کاره. توکن JWT شامل اطلاعاتی مثل شناسه کاربر و تاریخ انقضاست و بعد از ورود موفقیت‌آمیز کاربر، بهش داده می‌شه تا تو درخواست‌های بعدی ازش استفاده کنه .نصب و راه‌اندازی کتابخانه‌های مورد نیازبرای پیاده‌سازی احراز هویت با JWT توی NestJS، باید چند تا کتابخانه نصب کنیم :npm install --save @nestjs/jwt @nestjs/passport passport passport-jwt
 bcryptjsکتابخانه‌های @nestjs/jwt و @nestjs/passport برای کار با JWT و Passport استفاده می‌شن ، کتابخانه passport یه فریم‌ورک احراز هویته و passport-jwt یه استراتژی برای استفاده از JWT با Passport فراهم می‌کنه . کتابخانه bcryptjs هم برای هش کردن رمز عبور استفاده می‌شه .پیکربندی JWTاول از همه، باید ماژول JWT رو پیکربندی کنیم. این کار رو تو فایل auth.module.ts انجام می‌دیم :import { Module } from &#039;@nestjs/common&#039;;
import { JwtModule } from &#039;@nestjs/jwt&#039;;
import { PassportModule } from &#039;@nestjs/passport&#039;;
import { AuthService } from &#039;./auth.service&#039;;
import { AuthController } from &#039;./auth.controller&#039;;
import { UsersModule } from &#039;../users/users.module&#039;;
import { JwtStrategy } from &#039;./jwt.strategy&#039;;

@Module(
     { 
         imports: [
                UsersModule,
                PassportModule,
               JwtModule.register({ 
                         secret: &#039;secretKey&#039;, // کلید مخفی برای امضای توکن‌ها 
                         signOptions: { expiresIn: &#039;60m&#039; }, // مدت زمان اعتبار توکن‌ها
                          }),  
         ], providers: [AuthService, JwtStrategy],   controllers: [AuthController], }
) 
export class AuthModule {}اینجا ماژول JWT رو با یه کلید مخفی و مدت زمان اعتبار توکن پیکربندی کردیم. همچنین، ماژول Passport و استراتژی JWT رو هم اضافه کردیم .ایجاد سرویس احراز هویتحالا بریم سراغ ایجاد سرویس احراز هویت. این سرویس مسئولیت‌های اصلی مثل ورود کاربر، تولید توکن JWT و تأیید هویت کاربر رو بر عهده داره. فایل auth.service.ts به این شکل خواهد بود :import { Injectable } from &#039;@nestjs/common&#039;;
import { JwtService } from &#039;@nestjs/jwt&#039;;
import { UsersService } from &#039;../users/users.service&#039;;
import * as bcrypt from &#039;bcryptjs&#039;;

@Injectable()
export class AuthService {
            constructor(
                 private readonly usersService: UsersService ,
                 private readonly jwtService: JwtService,
            ) {}

            async validateUser(username: string, pass: string): Promise&lt;any&gt; {
                  const user = await this.usersService.findOne(username);
                  if (user &amp;&amp; bcrypt.compareSync(pass, user.password)) {
                           const { password, ...result } = user; 
                           return result; 
                  }
                  return null;
             }

             async login(user: any) {
                   const payload = { username: user.username, sub: user.userId };
                   return { access_token: this.jwtService.sign(payload),     };
             }
 }تو این سرویس، متد validateUser برای تأیید هویت کاربر استفاده می‌شه و متد login یه توکن JWT برای کاربر تولید می‌کنه .ایجاد کنترلر احراز هویتکنترلر احراز هویت وظیفه مدیریت درخواست‌های مربوط به احراز هویت رو داره. فایل auth.controller.ts به این شکل خواهد بود :import { Controller, Request, Post, UseGuards } from &#039;@nestjs/common&#039;; 
import { AuthService } from &#039;./auth.service&#039;; 
import { LocalAuthGuard } from &#039;./local-auth.guard&#039;; 

@Controller(&#039;auth&#039;) 
export class AuthController { 
  constructor(private readonly authService: AuthService) {} 
  @UseGuards(LocalAuthGuard) 
  @Post(&#039;login&#039;) 
  async login(@Request() req) { 
    return this.authService.login(req.user); 
  } 
}این کنترلر یه مسیر /auth/login ایجاد می‌کنه که از گارد محلی LocalAuthGuard برای تأیید هویت استفاده می‌کنه .ایجاد گاردهای احراز هویتبرای مدیریت احراز هویت، نیاز به گاردهای مختلفی داریم. اولین گارد، LocalAuthGuard، مسئول تأیید هویت کاربر با استفاده از نام کاربری و رمز عبوره. فایل local-auth.guard.ts به این شکل خواهد بود :import { Injectable } from &#039;@nestjs/common&#039;; 
import { AuthGuard } from &#039;@nestjs/passport&#039;; 

@Injectable() 
export class LocalAuthGuard extends AuthGuard(&#039;local&#039;) {}برای ایجاد استراتژی محلی، فایل local.strategy.ts به این شکل خواهد بود :import { Strategy } from &#039;passport-local&#039;; 
import { PassportStrategy } from &#039;@nestjs/passport&#039;; 
import { Injectable, UnauthorizedException } from &#039;@nestjs/common&#039;; 
import { AuthService } from &#039;./auth.service&#039;;  

@Injectable() 
export class LocalStrategy extends PassportStrategy(Strategy) { 
  constructor(private authService: AuthService) { 
    super(); 
  } 

  async validate(username: string, password: string): Promise&lt;any&gt; { 
    const user = await this.authService.validateUser(username, password); 
    if (!user) { 
      throw new UnauthorizedException(); 
    } 
    return user; 
  } 
}گارد دوم، JwtAuthGuard، مسئول تأیید توکن JWT برای دسترسی به مسیرهای محافظت‌شده‌ست. فایل jwt-auth.guard.ts به این شکل خواهد بود :import { Injectable } from &#039;@nestjs/common&#039;; 
import { AuthGuard } from &#039;@nestjs/passport&#039;; 

@Injectable() 
export class JwtAuthGuard extends AuthGuard(&#039;jwt&#039;) {}برای ایجاد استراتژی JWT، فایل jwt.strategy.ts به این شکل خواهد بود :import { Injectable } from &#039;@nestjs/common&#039;; 
import { PassportStrategy } from &#039;@nestjs/passport&#039;; 
import { ExtractJwt, Strategy } from &#039;passport-jwt&#039;; 

@Injectable() 
export class JwtStrategy extends PassportStrategy(Strategy) { 
  constructor() { 
    super({ 
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), 
      ignoreExpiration: false, 
      secretOrKey: &#039;secretKey&#039;, // کلید مخفی برای اعتبارسنجی توکن‌ها 
    });
  }

  async validate(payload: any) {
    return { userId: payload.sub, username: payload.username };
  }
}ایجاد کاربرانحالا باید بخشی برای مدیریت کاربران داشته باشیم. تو فایل users.service.ts، می‌تونیم متدهایی برای پیدا کردن کاربر بر اساس نام کاربری و ایجاد کاربر جدید داشته باشیم :import { Injectable } from &#039;@nestjs/common&#039;;
import { User } from &#039;./user.entity&#039;;
import { Repository } from &#039;typeorm&#039;;
import { InjectRepository } from &#039;@nestjs/typeorm&#039;;
import * as bcrypt from &#039;bcryptjs&#039;;

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository&lt;User&gt;,
  ) {}

  async findOne(username: string): Promise&lt;User | undefined&gt; {
    return this.usersRepository.findOne({ where: { username } });
  }

  async create(username: string, password: string): Promise&lt;User&gt; {
    const hashedPassword = await bcrypt.hash(password, 10);
    const newUser = this.usersRepository.create({ username, password: hashedPassword });
    return this.usersRepository.save(newUser);
  }
}فایل user.entity.ts هم به این شکل خواهد بود :import { Entity, Column, PrimaryGeneratedColumn } from &#039;typeorm&#039;;

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

  @Column()
  username: string;

  @Column()
  password: string;
}محافظت از مسیرهای مختلفبرای محافظت از مسیرهای مختلف، می‌تونید از JwtAuthGuard استفاده کنید. به عنوان مثال، تو یه کنترلر دیگه می‌تونید این کار رو انجام بدید :import { Controller, Get, UseGuards } from &#039;@nestjs/common&#039;;
import { JwtAuthGuard } from &#039;./auth/jwt-auth.guard&#039;;

@Controller(&#039;profile&#039;)
export class ProfileController {
  @UseGuards(JwtAuthGuard)
  @Get()
  getProfile(@Request() req) {
    return req.user;
  }
}جمع بندیخب دوستان ، تو این پست به صورت مفصل با احراز هویت توی NestJS آشنا شدیم و یاد گرفتیم چطور می‌تونیم یه سیستم احراز هویت قوی با استفاده از JWT و Passport بسازیم . حالا می‌تونید از این ترفندها و تکنیک‌ها تو پروژه‌های خودتون استفاده کنید و امنیت برنامه‌هاتون رو افزایش بدید . اگه سوال یا نظری داشتید، خوشحال می‌شم که با من در میون بذارید ، یاعلیمخلصیم:)</description>
                <category>Mearaj.Parsa</category>
                <author>Mearaj.Parsa</author>
                <pubDate>Wed, 07 Aug 2024 06:33:19 +0330</pubDate>
            </item>
                    <item>
                <title>مدیریت دسترسی مبتنی بر نقش در NestJS</title>
                <link>https://virgool.io/backend-community/%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D9%85%D8%A8%D8%AA%D9%86%DB%8C-%D8%A8%D8%B1-%D9%86%D9%82%D8%B4-%D8%AF%D8%B1-nestjs-x2na9qjnuldm</link>
                <description>مدیریت دسترسی مبتنی بر نقش در NestJS | معراج پارساسلام دوستان امروز می‌خوایم درباره یکی از موضوعات مهم و کاربردی تو دنیای برنامه‌نویسی وب صحبت کنیم : مدیریت دسترسی مبتنی بر نقش (RBAC) توی NestJS . اگه تا حالا با RBAC آشنا نبودید، نگران نباشید ، تو این مقاله می‌خوایم به صورت کامل و جامع درباره RBAC صحبت کنیم و نحوه پیاده‌سازی اون توی NestJS رو بررسی کنیم . پس با من همراه باشیدمدیریت دسترسی مبتنی بر نقش (RBAC) چیه؟مدیریت دسترسی مبتنی بر نقش (RBAC) یه روش برای کنترل دسترسی به منابع تو یه سیستمه . تو این مدل ، دسترسی به منابع مختلف بر اساس نقش‌های تعیین‌شده برای کاربران کنترل می‌شه . به عبارت دیگه ، هر کاربر یا گروهی از کاربران یه نقش خاص دارن و دسترسی به منابع مختلف بر اساس این نقش‌ها محدود یا مجاز می‌شه .یه مثال ساده از RBACتصور کنید شما یه وب‌سایت با سه نقش مختلف دارید: مدیر ، کاربر معمولی و مهمان . مدیر دسترسی کامل به همه منابع سایت داره ، کاربر معمولی به برخی از منابع دسترسی داره و مهمان فقط به منابع عمومی دسترسی داره . با استفاده از RBAC ، می‌تونید به‌طور دقیق تعیین کنید که هر نقش به چه منابعی دسترسی داره و چه عملیاتی رو می‌تونه انجام بده .چرا باید از RBAC استفاده کنیم؟استفاده از RBAC کلی مزیت داره :مدیریت ساده‌تر دسترسی‌ها : با استفاده از نقش‌ها به‌جای مدیریت دسترسی‌ها برای هر کاربر به‌صورت جداگانه، می‌تونید دسترسی‌ها رو ساده‌تر مدیریت کنیدمقیاس‌پذیری بهتر : با اضافه کردن نقش‌های جدید یا تغییر نقش‌های موجود، می‌تونید به‌راحتی مقیاس‌پذیری سیستم خودتون رو بهبود بدیدامنیت بالاتر : RBAC به شما این امکان رو می‌ده که دسترسی‌های دقیق‌تری رو تنظیم کنید و از دسترسی‌های غیرمجاز جلوگیری کنیدپیاده‌سازی RBAC توی NestJSحالا که با مفهوم RBAC آشنا شدیم ، بیایید ببینیم چطور می‌تونیم این مدل رو توی NestJS پیاده‌سازی کنیم  ، برای این کار، از امکانات NestJS و تکنیک‌های مختلف استفاده خواهیم کرد.مراحل پیاده‌سازی RBACتعریف نقش‌ها و مجوزهاایجاد گاردهای مبتنی بر نقشپیکربندی مسیرها و کنترلرها تعریف نقش‌ها و مجوزهااولین قدم برای پیاده‌سازی RBAC ، تعریف نقش‌ها و مجوزهاست . برای این کار، می‌تونید از Enum‌ ها و پایگاه داده استفاده کنید . برای ایجاد Enum ابتدا یه فایل به نام roles.enum.ts ایجاد کنید و نقش‌ها رو تعریف کنید :export enum Role { 
  ADMIN = &#039;admin&#039;, 
  USER = &#039;user&#039;,
  GUEST = &#039;guest&#039;, 
}خب ، حالا نوبت ایجاد مدل پایگاه داده برای نقش‌ها و کاربر هاست . اگه از پایگاه داده استفاده می‌کنید ، باید مدل‌های مربوط به کاربران و نقش‌ها رو تعریف کنید . فرض کنید از TypeORM استفاده می‌کنید :// user.entity.tsimport { Entity, Column, PrimaryGeneratedColumn, ManyToMany } from &#039;typeorm&#039;;
import { Role as RoleEntity } from &#039;./role.entity&#039;;

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

   @Column()
   username: string;

   @Column()
   password: string;

   @ManyToMany(() =&gt; RoleEntity)
   roles: RoleEntity[]; 
}// role.entity.tsimport { Entity, Column, PrimaryGeneratedColumn } from &#039;typeorm&#039;;

@Entity() export class Role {
   @PrimaryGeneratedColumn()   id: number;
   @Column()   name: string; 
}توضییحات : ما دو مدل به نامهای user.entity.ts و  role.entity.ts ایجاد کردیم . نکته مهمش ارتباط فیلد roles در مدل user به مدل Role هست . همین فیلد نقش هر کاربر رو در خودش نگه داری میکنهایجاد گاردهای مبتنی بر نقشگارد‌ها تو NestJS به شما این امکان رو می‌دن که دسترسی به مسیرها رو بر اساس شرایط خاص کنترل کنید . برای پیاده‌سازی RBAC ، باید گاردهایی برای بررسی نقش‌ها ایجاد کنید . برای این کار ، فایل roles.guard.ts رو به این شکل ایجاد کنید :import { 
     Injectable,
     CanActivate,
     ExecutionContext,
     ForbiddenException } from &#039;@nestjs/common&#039;;
import { Reflector } from &#039;@nestjs/core&#039;;
import { Role } from &#039;./roles.enum&#039;;

@Injectable()
 export class RolesGuard implements CanActivate {
   constructor(private reflector: Reflector) {}
   canActivate(context: ExecutionContext): boolean { 
     const requiredRoles = this.reflector.getAllAndOverride&lt;Role[]&gt;(&#039;roles&#039;,[context.getHandler(),context.getClass(),]);
     if (!requiredRoles) {       return true;     }
     const request = context.switchToHttp().getRequest();
     const user = request.user;
     const hasRole = () =&gt; user.roles.some((role) =&gt; requiredRoles.includes(role));
     if (user &amp;&amp; hasRole()) {       return true;     }
     throw new ForbiddenException(&#039;Forbidden&#039;);
   } 
}نکته :ایجاد دکوراتور نقش : برای راحت‌تر کردن استفاده از گاردهای نقش ، می‌تونید یه دکوراتور ایجاد کنید . فایل roles.decorator.ts به این شکل خواهد بود :import { SetMetadata } from &#039;@nestjs/common&#039;;
import { Role } from &#039;./roles.enum&#039;;

export const Roles = (...roles: Role[]) =&gt; SetMetadata(&#039;roles&#039;, roles);پیکربندی مسیرها و کنترلرهاحالا که گارد و دکوراتورهای نقش رو ایجاد کردیم ، باید از اون‌ها تو مسیرها و کنترلرهای خودمون استفاده کنیم . به عنوان مثال ، فرض کنید کنترلری به نام CatsController دارید و می‌خواید دسترسی به برخی از مسیرها رو بر اساس نقش‌ها کنترل کنید . فایل cats.controller.ts به این شکل خواهد بود :import { Controller, Get, Post, UseGuards, Request } from &#039;@nestjs/common&#039;;
import { Roles } from &#039;./roles.decorator&#039;;
import { RolesGuard } from &#039;./roles.guard&#039;;
import { Role } from &#039;./roles.enum&#039;;

@Controller(&#039;cats&#039;)
export class CatsController {
   @Get()
   @Roles(Role.ADMIN)
   @UseGuards(RolesGuard)
   findAll(@Request() req) {
     return &#039;This action returns all cats&#039;;
   }

   @Post()
   @Roles(Role.ADMIN, Role.USER)
   @UseGuards(RolesGuard)
   create(@Request() req) {
     return &#039;This action adds a new cat&#039;;
   }
 }تو این مثال، فقط کاربرانی با نقش ADMIN به مسیر GET /cats و کاربران با نقش‌های ADMIN یا USER به مسیر POST /cats دسترسی خواهند داشت . به همین سادگی  به همین خوشمزگی :)نکات مهم در پیاده‌سازی RBACمدیریت نقش‌ها و مجوزها : نقش‌ها و مجوزها باید به‌طور مداوم مدیریت و به‌روز بشن . اطمینان حاصل کنید که نقش‌ها به درستی به کاربران اختصاص داده شده و دسترسی‌ها به‌طور دقیق تنظیم شده‌انآزمون و خطا : پیاده‌سازی RBAC می‌تونه پیچیده باشه. اطمینان حاصل کنید که تمام مسیرها و کنترلرها به درستی تست شدن و دسترسی‌ها به‌درستی اعمال می‌شنامنیت : اطمینان حاصل کنید که کلیدهای امنیتی و تنظیمات امنیتی به درستی پیکربندی شدن و از آسیب‌پذیری‌های احتمالی جلوگیری می‌شهجمع بندیامیدوارم با مطالعه این مقاله ، تونسته باشید با مفهوم RBAC و نحوه پیاده‌سازی اون توی NestJS آشنا بشید. استفاده از RBAC می‌تونه به شما کمک کنه تا امنیت برنامه‌های خودتون رو بهبود بدید و دسترسی‌ها رو به‌طور دقیق مدیریت کنید . اگه سوال یا نظری داشتید ، خوشحال می‌شم که با من در میان بذارید.مخلصیم :)</description>
                <category>Mearaj.Parsa</category>
                <author>Mearaj.Parsa</author>
                <pubDate>Thu, 25 Jul 2024 09:09:04 +0330</pubDate>
            </item>
                    <item>
                <title>خودآموز سریع NestJS - قسمت دوم</title>
                <link>https://virgool.io/backend-community/%D8%AE%D9%88%D8%AF%D8%A2%D9%85%D9%88%D8%B2-%D8%B3%D8%B1%DB%8C%D8%B9-nestjs-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-cmfpl2dwyzvn</link>
                <description>آموزش سریع NestJS | معراج پارساسلام دوستانتو قسمت اول آموزش سریع NestJS ، راجع به نصب و  راه‌اندازی اولیه ، ساختار پروژه ، کنترلرها ، سرویس‌ها و پایگاه داده رو  یاد گرفتیم . اگه هنوز قسمت اول آموزش رو ندیدی این مقاله رو بخون😎 نکته : من توی این مقاله ، بصورت خلاصه و جهت آشنایی با امکانات و بخش های مختلف NestJS بهتون آموزش میدم ولی زیر هر قسمت از آموزش مقاله تخصصی و کامل اون موضوع هم قرار دادم که میتونی ازشون استفاده کنیخب ، تو این قسمت قراره راجع به مباحث دیگه مثل :گاردها و میان‌افزارهافیلترها و پایپ‌هاآزمایش و تست‌نویسیتزریق وابستگی (Dependency Injection)بهینه‌سازی و بهترین شیوه‌هاصحبت کنیم پس با من همراه باش تا باهم ، قدم به قدم به یک توسعه دهنده وب حرفه ای تبدیل بشیمگاردها و میان‌افزارهاگاردها گاردها برای کنترل دسترسی به مسیرهای مختلف استفاده می‌شن . اونا بر پایه دکوریتور @Injectable و اینترفیس CanActivate پیاده‌سازی می‌شن و به شما کمک می‌کنن تا امنیت و منطق سفارشی خودتون رو به برنامه اضافه کنید . برای ایجاد یه گارد جدید، از دستور زیر استفاده کنید :nest generate guard app-guard    // شما بجای app-guard باید اسم مورد نظر خودتونو بزنیداین دستور یه فایل گارد جدید با نام app-guard.guard.ts  ایجاد میکنه .میان‌افزارهامیان‌افزارها برای انجام عملیات قبل یا بعد از پردازش درخواست‌ها استفاده می‌شن . برای ایجاد یه میان‌افزار جدید، از دستور زیر استفاده کنید :nest generate middleware app-middleware    // شما بجای app-middlewareباید اسم مورد نظر خودتونو بزنیداین دستور یه فایل میان‌افزار جدید با نام app.middleware.middleware.ts ایجاد می‌کنه .بزودی لینک آموزش تخصصی و کامل گاردها و میان‌افزارها رو اینجا قرار میدمفیلترها و پایپ‌هافیلترها و پایپ‌ها ابزارهایی هستن که به شما کمک می‌کنن تا داده‌ها و خطاها رو مدیریت کنیدمعرفی فیلترهای استثنا (Exception Filters)      فیلترهای استثنا برای مدیریت خطاها و ارسال پاسخ‌های مناسب به کاربر استفاده می‌شن . برای ایجاد یه فیلتر استثنا جدید، از دستور زیر استفاده کنید : nest generate filter filter-name //بجای filter-name از اسم مورد نظر خودتون برای فیلتر استفاده کنیناین دستور یه فایل فیلتر جدید با نام filter-name.filter.ts ایجاد می‌کنه . معرفی پایپ‌ها (Pipes)      پایپ‌ها برای اعتبارسنجی و تبدیل داده‌ها استفاده می‌شن . برای ایجاد یه پایپ جدید، از دستور زیر استفاده کنید :nest generate pipe pipe-name //بجای pipe-name از اسم مورد نظر خودتون استفاده کنیناین دستور یه فایل پایپ جدید با نام pipe-name.pipe.ts ایجاد می‌کنه .بزودی لینک آموزش تخصصی و کامل فیلترها و پایپ‌ها رو اینجا قرار میدمآزمایش و تست‌نویسی آقای NestJS ابزارهای مختلفی برای تست‌نویسی ارائه می‌ده که می‌تونید از اونا برای نوشتن تست‌های واحد و یکپارچه استفاده کنید . تست‌نویسی یکی از بخش‌های مهم تو توسعه نرم‌افزاره که به شما کمک می‌کنه تا از صحت عملکرد کدهای خودتون مطمئن بشیدنوشتن تست واحد (Unit Test)برای نوشتن تست‌های واحد ، از کتابخانه‌هایی مثل Jest استفاده می‌شه . فایل‌های تست واحد به طور پیش‌فرض در کنار فایل‌های مربوطه ایجاد می‌شن .نوشتن تست یکپارچه (Integration Test)تست‌های یکپارچه برای بررسی عملکرد کلی سیستم استفاده می‌شن و می‌تونید اونا رو با استفاده از NestJS Testing Module پیاده‌سازی کنید .بزودی لینک آموزش تخصصی و کامل آزمایش و تست‌نویسی رو اینجا قرار میدممباحث پیشرفته ترتو این بخش به برخی مباحث پیشرفته تو NestJS می‌پردازیم که می‌تونن به شما تو بهبود کدهای خودتون کمک کنن .تزریق وابستگی (Dependency Injection)تزریق وابستگی یکی از مفاهیم کلیدی تو NestJS هست که به شما کمک می‌کنه وابستگی‌های مختلف رو مدیریت کنید و کدهای تمیزتری بنویسید . (بزودی لینک آموزش جامع تزریق وابستگی رو قرار میدم)استفاده از ماژول‌های خارجیجناب NestJS دارای اکوسیستم بزرگی از ماژول‌های خارجی هم هست که می‌تونید از اونا برای افزودن قابلیت‌های مختلف به برنامه خودتون استفاده کنید . (بزودی لینک آموزش جامع استفاده از ماژول‌های خارجی رو قرار میدم)بهینه‌سازی و بهترین شیوه‌هابرای بهینه‌سازی کدهای خودتون و پیاده‌سازی بهترین شیوه‌ها، می‌تونید از نکات و تکنیک‌های مختلفی که تو مستندات NestJS و منابع آموزشی موجود هست استفاده کنید .  (بزودی لینک آموزش جامع بهینه‌سازی و بهترین شیوه‌ها رو قرار میدم)جمع بندیخب دوستان، توی قسمت اول و دوم آموزش سریع NestJS با همدیگه مباحث مختلفی مثل نصب و راه‌اندازی اولیه ، ساختار پروژه ، کنترلرها ، سرویس‌ها ، پایگاه داده ، گاردها و میان‌افزارها ، فیلترها و پایپ‌ها ، و تست‌نویسی رو پوشش دادیم . اگه دوست دارید بیشتر یاد بگیرید ، پیشنهاد می‌کنم مستندات رسمی NestJS و منابع آموزشی مختلف رو مطالعه کنید. موفق باشیدتمرین یادتون نره . خوشحال می‌شم نظرات و  تجربیاتتو در مورد NestJS باهام به اشتراک بذاریمخلصیم 🫡</description>
                <category>Mearaj.Parsa</category>
                <author>Mearaj.Parsa</author>
                <pubDate>Wed, 24 Jul 2024 10:38:34 +0330</pubDate>
            </item>
                    <item>
                <title>خودآموز سریع  NestJS - قسمت اول</title>
                <link>https://virgool.io/backend-community/%D8%AE%D9%88%D8%AF%D8%A2%D9%85%D9%88%D8%B2-%D8%B3%D8%B1%DB%8C%D8%B9-nestjs-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-b6a7ucvhchkr</link>
                <description>آموزش سریع 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 &#039;@nestjs/common&#039;;
import { UsersService } from &#039;./users.service&#039;;

@Controller(&#039;controller-name&#039;)
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 &#039;@nestjs/common&#039;;
import { TypeOrmModule } from &#039;@nestjs/typeorm&#039;;

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: &#039;postgres&#039;,
      host: &#039;localhost&#039;,
      port: 5432,
      username: &#039;test&#039;,
      password: &#039;test&#039;,
      database: &#039;test&#039;,
      entities: [__dirname + &#039;/../**/*.entity{.ts,.js}&#039;],
      synchronize: true,
    }),
  ],
})
export class AppModule {}حالا که همه چیز آماده شد باید برای انجام عملیات CRUD ، اول یه Entity ایجاد کنید :import { Entity, Column, PrimaryGeneratedColumn } from &#039;typeorm&#039;;

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

  @Column()
  name: string;

  @Column()
  age: number;
}بعدش می‌تونید از ریپوزیتوری‌ها برای انجام عملیات مختلف استفاده کنید . مثلا ما اینجا توی همون تابع findAll که تو سرویس کاربران بود میخوایم استفاده کنیم :import { Injectable } from &#039;@nestjs/common&#039;;
import { InjectRepository } from &#039;@nestjs/typeorm&#039;;
import { Repository } from &#039;typeorm&#039;;
import { User } from &#039;./user.entity&#039;;

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private readonly userRepository: Repository&lt;User&gt;,
  ) {}

  findAll(): Promise&lt;User[]&gt; {
    return this.userRepository.find();
  }
}به همین سادگی تونستیم لیست کاربران رو از دیتابیس برگردونیم .جمع بندیخب دوستان، تو این مقاله با همدیگه برنامه‌نویسی وب با NestJS رو یاد گرفتیم و مباحث مختلفی مثل نصب و راه‌اندازی اولیه ، ساختار پروژه ، کنترلرها ، سرویس‌ها و پایگاه داده رو پوشش دادیم . حالا با دنبال کردن این آموزش‌ها ، می‌تونید به راحتی برنامه‌های وب خودتون رو با استفاده از NestJS توسعه بدید . اگه دوست دارید بیشتر یاد بگیرید، پیشنهاد می‌کنم مقاله بعدی رو از دست ندین . توی مقاله بعدی راجع به موارد زیر صحبت میکنم :گاردها و میان‌افزارهافیلترها و پایپ‌هاآزمایش و تست‌نویسیتزریق وابستگی (Dependency Injection)بهینه‌سازی و بهترین شیوه‌هاتمرین یادتون نره . خوشحال می‌شم نظرات و  تجربیاتتون رو در مورد NestJS باهام به اشتراک بذاریمخلصیم:)</description>
                <category>Mearaj.Parsa</category>
                <author>Mearaj.Parsa</author>
                <pubDate>Sun, 21 Jul 2024 20:24:06 +0330</pubDate>
            </item>
                    <item>
                <title>موهبتی به نام NestJS</title>
                <link>https://virgool.io/backend-community/%D9%85%D9%88%D9%87%D8%A8%D8%AA%DB%8C-%D8%A8%D9%87-%D9%86%D8%A7%D9%85-nestjs-tnl28cejnkyi</link>
                <description>نسخه صوتی با ai ایجاد شده ، سخت نگیرید رفقا :) تنکیوآموزش NestJS | معراج پارساسلام دوستانامروز می‌خوام باهاتون درباره‌ی یکی از فریم‌ورک‌های جذاب برای توسعه‌ی برنامه‌های سمت سرور، یعنی NestJS صحبت کنم . NestJS واقعاً یک چیز خفنه ، این فریم‌ورک با استفاده از تایپ اسکریپت ساخته شده و کاملاً از اون پشتیبانی می‌کنه ، اما اگه دوست داشته باشی می‌تونی با جاوا اسکریپت خالص هم کار کنی.یکی از نکاتی کهNestJS رو از بقیه فریم‌ورک‌ها متمایز می‌کنه، استفاده‌ی اون از Express.js به عنوان فریم‌ورک پیش‌فرض برای HTTP سرویسهاست. Express یکی از قدرتمندترین و معروف‌ترین فریم‌ورک‌ها برای سرورهای Node.js هست که در NestJS ، می‌تونید به راحتی از این اکوسیستم گسترده و ابزارهای متعددی که برای Express وجود داره ، بهره‌مند بشید . جالب اینه که NestJS به صورت اختیاری می‌تونه از Fastify هم استفاده کنه . Fastify یک فریم‌ورک سریع و با عملکرد بهینه‌تر هست که امکان بهبود سرعت و عملکرد برنامه‌ها رو فراهم می‌کنه . این امر به شما این امکان رو می‌ده که بر اساس نیازهای خودتون ، فریم‌ورکی رو انتخاب کنید که بهترین عملکرد رو برای برنامتون ارائه بده .ضمنا آقایNestJS از اصول مدرن برنامه نویسی و با الهام از Angular بهمون این امکان رو میده که برنامه‌هایی با عملکرد بالا و قابل اطمینان بنویسیم . همچنین میتونیم از ماژول‌های شخص ثالث بسیاری که برای پلتفرم اصلی Node.js موجودند ، بهره‌برداری کنیم و به راحتی ابزارهای مختلفی را به پروژه‌های خودمون اضافه کنیم.اگه میخوای توی NestJS به یک متخصص کار درست تبدیل بشی آموزش های زیر رو دنبال کن :آموزش سریع NestJS قسمت اول آموزش سریع NestJS قسمت دوممدیریت دسترسی مبتنی بر نقش در     NestJSاحراز هویت در NestJSاین لیست هر هفته بروز رسانی میشه و آموزش های جدید بهش اضافه میشهخب تا اینجا با آقایNestJS آشنا شدیم ، بهتره دوتا پارامتر مهم یعنی سرعت و امنیت رو هم بررسی کنیمسرعت در NestJS | معراج پارسابررسی سرعت NestJsبیاین اول یه نگاهی به مفهوم سرعت در فریم‌ورک‌ها بندازیم . وقتی از سرعت صحبت می‌کنیم ، در واقع به دو جنبه مهم اشاره داریم :سرعت توسعهسرعت اجرای برنامهکه NestJs در هر دو زمینه عملکرد خوبی داره.سرعت توسعههمونطور که قبلا هم گفتیم ، NestJS بر پایه تایپ اسکریپت هست و با استفاده از اون ، اصول معماری مدرن و ابزارهای قوی فرآیند توسعه رو سریع‌تر و کارآمدتر می‌کنه . تایپ اسکریپت با ارائه تایپ‌های استاتیک و قابلیت‌های قدرتمند ، به توسعه‌دهندگان کمک می‌کنه که کدهای تمیزتر و کم خطاتری بنویسند . همچنین ، NestJS با الهام ازAngular ، از مفاهیم مدرنی مثل ماژول‌ها ، دیپندنسی اینجکشن (Dependency Injection) و دکوریتورها(Decorators) استفاده می‌کنه که این‌ها همه به توسعه‌دهنده کمک می‌کنن که به سرعت پروژه‌ها رو ایجاد و مدیریت کنه.سرعت اجرای برنامهدر بحث سرعت اجرای برنامه ، NestJS با ترکیبExpress.js یا Fastify به عنوان سرورHTTP ، عملکرد بسیار خوبی رو ارائه می‌ده . از طرفی اگه به دنبال سرعت بیشتری هستید ، می‌تونید ازFastify استفاده کنید که به خاطر بهینه‌سازی‌هاش ، سرعت بسیار بالاتری نسبت به Express.js داره .مقایسه با فریم‌ورک‌های دیگرحالا بیاییدNestJS رو با چند تا از فریم‌ورک‌های معروف دیگه مقایسه کنیم. یکی از معیارهای مهم برای این مقایسه ، نتایج بنچ‌مارک‌هاست . بنچ‌مارک‌ها می‌تونند عملکرد فریم‌ورک‌های مختلف رو در شرایط مشابه اندازه‌گیری و مقایسه کنند.بنچ‌مارک‌هاطبق گزارش‌های بنچ‌مارک که عملکرد فریم‌ورک‌های مختلف رو اندازه‌گیری می‌کنند، Fastify معمولاً عملکرد بهتری نسبت بهExpress.js داره . این گزارش‌ها نشون می‌ده که Fastify می‌تونه تا 2 برابر سریع‌تر ازExpress.js باشه . حالاNestJS با امکان استفاده از هر دوی این فریم‌ورک‌ها ، این قابلیت رو به شما می‌ده که بین سرعت و قابلیت‌های مختلف حق انتخاب داشته باشید . در یک بنچ‌مارک معروف که توسطTechEmpower انجام شده ، Fastify در بین فریم‌ورک‌های مختلفNode.js یکی از سریع‌ترین‌هاست . در این بنچ‌مارک ، Fastify به طور متوسط توانسته تا 30,000 درخواست در ثانیه رو پردازش کنه ، در حالی کهExpress.js حدود 15,000 درخواست در ثانیه رو مدیریت می‌کرد . این تفاوت سرعت برای برنامه‌هایی که نیاز به پردازش تعداد زیادی درخواست دارند ، می‌تونه بسیار حیاتی باشه . از طرفی ، NestJS با استفاده از این فریم‌ورک‌ها ، به شما این امکان رو می‌ده که بدون نیاز به تغییرات زیاد در کد ، بینExpress.js و Fastify جابجا بشید و از مزایای هر دو استفاده کنید .مقایسه با سایر فریم‌ورک‌هاآقای NestJS در مقایسه با فریم‌ورک‌های دیگه مثل Koa ، Hapi و Sails.js هم عملکرد خوبی داره . Koa که توسط تیم توسعه‌دهندهExpress.js ایجاد شده ، برای سبک بودن و سرعت بالا طراحی شده ، اما NestJS با استفاده از تایپ اسکریپت و معماری مدرن ، قابلیت‌های بیشتری رو ارائه می‌ده که به توسعه‌دهندگان کمک می‌کنه تا برنامه‌هایی قابل نگهداری‌تر و مقیاس‌پذیرتر بنویسند .همچنینHapi وSails.js هم فریم‌ورک‌های محبوب دیگه‌ای هستند که هر کدوم مزایا و معایب خودشون رو دارن . Hapi به خاطر قابلیت‌های امنیتی و مدیریت درخواست‌های پیچیده معروفه ، اما ممکنه نسبت به Express.js و Fastify کمی کندتر باشه . از طرفی ، Sails.js که از MVC الهام گرفته ، برای توسعه سریع اپلیکیشن‌های وب کاربرد داره ، اما اون هم پیچیدگی‌های خاص خودش رو هم داره .بهینه‌سازی‌ها درNestJSیکی از نقاط قوتNestJS اینه که می‌تونه با استفاده از Fastify به جایExpress.js ، سرعت اجرای برنامه‌ها رو بهبود ببخشه . Fastify با استفاده از تکنیک‌های بهینه‌سازی مثل آسنکرون بودن و مدیریت بهینه حافظه ، می‌تونه درخواست‌ها رو با سرعت بسیار بالاتری پردازش کنه . علاوه بر این ، NestJS به توسعه‌دهندگان این امکان رو می‌ده که با استفاده از ابزارهای مدرنی مثل GraphQL ، WebSockets و Microservices ، برنامه‌های پیشرفته‌تری بسازند که هم سریع و هم مقیاس‌پذیر باشند .توسعه‌دهندگان وNestJSیکی از چیزهایی کهNestJS رو بسیار محبوب کرده ، جامعه و پشتیبانی قوی از توسعه‌دهندگان هست . شما می‌تونید به راحتی مستندات کامل و جامعی پیدا کنید که به شما در حل مشکلات و یادگیری بهتر کمک می‌کنند . همچنین ، وجود تعداد زیادی ماژول و پلاگین برای NestJS ، کار رو برای توسعه‌دهندگان بسیار راحت‌تر کردهامنیت در NestJS | معراج پارسابررسی امنیت درNestJSامنیت همیشه یکی از مهم‌ترین موضوعات در توسعه‌ی برنامه‌های وب و سرور بوده و هست . وقتی که صحبت از توسعه‌ی برنامه‌های سمت سرور می‌شه ، NestJS با امکانات و ابزارهای پیشرفته‌اش می‌تونه به ما کمک کنه تا برنامه‌های امن‌تر و مطمئن‌تری بسازیم . با هم نگاهی عمیق‌تر به قابلیت‌های امنیتی NestJS میندازیم و ببینیم چطور می‌تونیم از این امکانات برای افزایش امنیت برنامه‌هامون استفاده کنیم.استفاده ازJWT برای احراز هویتیکی از رایج‌ترین روش‌های احراز هویت در برنامه‌های مدرن، استفاده از JWT (JSON Web Tokens) هست . NestJS به راحتی امکان استفاده از JWT رو فراهم می‌کنه. با استفاده از کتابخانه‌ی passport و ماژول passport-jwt ، می‌تونید احراز هویت مبتنی بر توکن رو به سادگی پیاده‌سازی کنید. JWT به شما این امکان رو می‌ده که اطلاعات کاربر رو به صورت امن در یک توکن رمزنگاری شده نگهداری کنید و در هر درخواست به سرور، این توکن رو ارسال کنید تا احراز هویت کاربر تایید بشه.محافظت از مسیرها با استفاده از گاردهاما درNestJS از مفهومی به نام گاردها(Guards) استفاده می‌کنیم که بهمون این امکان رو می‌ده تا کنترل دقیقی روی دسترسی به مسیرهای مختلف برنامه‌ داشته باشیم . با استفاده از گاردها می‌تونید مطمئن بشید که فقط کاربران مجاز به مسیرهای حساس دسترسی دارند . مثلاً می‌تونید گاردهایی بنویسید که بررسی کنند آیا کاربر احراز هویت شده یا اینکه آیا کاربر نقش لازم برای دسترسی به یک مسیر خاص رو داره .استفاده از ماژول‌های امنیتیآقای NestJS ماژول‌های امنیتی متعددی رو ارائه می‌ده که به شما کمک می‌کنن تا برنامه‌هاتون رو امن‌تر کنید . مثلاً ماژول CSRF (Cross-Site Request Forgery) برای جلوگیری از حملات CSRF ، ماژول Rate Limiting برای محدود کردن تعداد درخواست‌های مکرر از یک منبع خاص و جلوگیری از حملات DDoS ، و ماژول Helmet برای تنظیم هدرهای امنیتیHTTP و محافظت در برابر حملات متداول وب مثل XSS وClickjacking .پیاده‌سازیSSL/TLSبرای اطمینان از اینکه داده‌های رد و بدل شده بین سرور و کلاینت‌ها به صورت امن انتقال پیدا می‌کنن، می‌تونید از SSL/TLS استفاده کنید. NestJS به شما امکان پیاده‌سازی آسان SSL/TLS رو می‌ده و با استفاده از کتابخانه‌هایی مثل Let’s Encrypt ، می‌تونید گواهینامه‌های SSL رایگان بگیرید و از اون‌ها در برنامه‌هاتون استفاده کنید.احراز هویت دو مرحله‌ای (2FA)یکی دیگه از روش‌های افزایش امنیت، استفاده از احراز هویت دو مرحله‌ای (2FA) هست. NestJS با استفاده از کتابخانه‌هایی مثل speakeasyو otplib به شما امکان پیاده‌سازی 2FA رو می‌ده . این روش به شما کمک می‌کنه که علاوه بر رمز عبور ، از یک عامل اضافی مثل کد تولید شده توسط اپلیکیشن Authenticator برای احراز هویت کاربران استفاده کنید .لاگینگ و مانیتورینگیکی از جنبه‌های مهم امنیت ، مانیتورینگ و لاگینگ هست . NestJS با استفاده از ابزارهای مختلفی مثل winston برای لاگینگ و prometheus برای مانیتورینگ ، به شما کمک می‌کنه تا فعالیت‌های مشکوک رو به سرعت شناسایی و پیگیری کنید . این ابزارها به شما امکان می‌دن که لاگ‌های مربوط به درخواست‌ها ، خطاها و سایر فعالیت‌های مهم رو ذخیره و آنالیز کنید .جلوگیری از حملات تزریق (SQL Injection)فریم‌ورکNestJS با استفاده ازORM های مدرن مثل TypeORM و Sequelize ، به شما کمک می‌کنه تا از حملات تزریق SQL جلوگیری کنید . این ORMها با استفاده از کوئری‌های پارامتری وescaping خودکار، از تزریق کدهای مخرب به دیتابیس جلوگیری می‌کنند . همچنین ، NestJS به شما امکان استفاده از کتابخانه‌های ضد تزریق مثل sqlstring رو می‌ده که به امنیت بیشتر دیتابیس شما کمک می‌کنن .استفاده ازbcrypt برای هش کردن رمز عبوربرای ذخیره‌سازی امن رمز عبور کاربران، می‌تونید از کتابخانه‌ی bcrypt استفاده کنید. bcrypt یکی از بهترین و امن‌ترین روش‌ها برای هش کردن رمز عبور هست و NestJS به راحتی از این کتابخانه پشتیبانی می‌کنه . با استفاده از bcrypt می‌تونید مطمئن باشید که حتی در صورت نشت اطلاعات دیتابیس ، رمزهای عبور کاربران قابل بازیابی نیستن.پیاده‌سازیCORSجناب NestJS با استفاده از ماژول CORS به شما امکانی می‌ده تا کنترل دقیقی روی دسترسی‌ها از دامنه‌های مختلف داشته باشید . این ماژول به شما کمک می‌کنه تا از دسترسی‌های غیرمجاز بهAPIهای خودتون جلوگیری کنید و تنظیمات دقیقی برای امنیت بیشتر اعمال کنید .امنیت در برابر حملاتXSSبرای محافظت در برابر حملات XSS (Cross-Site Scripting)، NestJS از ماژول Helmet استفاده می‌کنه که به شما امکان تنظیم هدرهای امنیتی مناسب رو می‌ده. این هدرها به مرورگرها اعلام می‌کنن که چه نوع محتوایی مجاز هست و چه نوع محتوایی باید بلاک بشه. این کار به شما کمک می‌کنه تا از اجرای اسکریپت‌های مخرب در صفحات وب جلوگیری کنید.استفاده ازRole-Based Access Control (RBAC)با پشتیبانی از سیستم‌های کنترل دسترسی مبتنی بر نقش (RBAC) ، میتونید دسترسی کاربران رو بر اساس نقش‌ها و مجوزهای تعریف شده مدیریت کنید . با استفاده ازRBAC می‌تونید به راحتی کنترل کنید که کدوم کاربر به چه بخش‌هایی از برنامه دسترسی داره و از دسترسی‌های غیرمجاز جلوگیری کنیدجمع‌بندیفریم‌ورک‌NestJS با ارائه امکانات و ابزارهای پیشرفته در زمینه‌های مختلف ، از جمله سرعت و امنیت ، به یکی از برترین فریم‌ورک‌های توسعه برنامه‌های سمت سرور تبدیل شده . در زمینه سرعت ، NestJS با ترکیب قدرتمند تایپ اسکریپت و استفاده از فریم‌ورک‌های HTTP Server مانندExpress.js و Fastify، این امکان رو فراهم می‌کنه که برنامه‌هایی با عملکرد بالا و قابل اطمینان توسعه بدید . با نتایج بنچ‌مارک‌ها که نشان‌دهنده توانایی بالایFastify در پردازش درخواست‌هاست ، شما می‌تونید با انتخاب هوشمندانه بین Express.js و Fastify، بهترین عملکرد رو برای برنامه‌های خودتون داشته باشید . در کنار این سرعت بالا ، NestJS امکانات امنیتی متعددی هم ارائه میده . از احراز هویت با استفاده ازJWT گرفته تا استفاده از گاردها برای محافظت از مسیرها ، NestJS به شما کمک می‌کنه تا برنامه‌هایی امن‌تر و مطمئن‌تر بسازید . استفاده از ماژول‌های امنیتی مانند CSRF، Rate Limiting و Helmet، پیاده‌سازی SSL/TLS ، احراز هویت دو مرحله‌ای (2FA)، و بهره‌گیری از ابزارهای لاگینگ و مانیتورینگ مانند winston و prometheus از جمله قابلیت‌هایی هست کهNestJS برای افزایش امنیت برنامه‌ها فراهم می‌کنه . همچنین NestJS با پشتیبانی از ORM های مدرن برای جلوگیری از حملات تزریقSQL و استفاده ازbcrypt برای هش کردن رمزهای عبور، به شما امکان میده تا از امنیت داده‌ها و اطلاعات کاربران اطمینان حاصل کنید . پیاده‌سازی CORS برای کنترل دسترسی‌ها و استفاده از Role-Based Access Control (RBAC) برای مدیریت دقیق دسترسی کاربران از دیگر ویژگی‌های امنیتی این فریم‌ورک هستن . در نهایت ، NestJS با ترکیب قدرت و سرعت با امنیت بالا، به شما این امکان را میده که برنامه‌هایی سریع، امن، قابل نگهداری و مقیاس‌پذیر بسازید . این فریم‌ورک با ارائه ابزارها و امکانات متنوع، تمامی نیازهای شما در توسعه برنامه‌های سمت سرور را پوشش میده و به شما کمک می‌کنه که با خیالی آسوده‌تر به توسعه و نگهداری برنامه‌ها بپردازید .امیدوارم که این مقاله به شما کمک کرده باشه تا باNestJS بیشتر آشنا بشید و از قابلیت‌ها و امکانات فوق‌العاده‌ای که ارائه می‌ده، بهره‌مند بشید . خوشحال می‌شم نظرات و تجربیاتتون رو در موردNestJS باهام به اشتراک بذاری.مخلصیم:)</description>
                <category>Mearaj.Parsa</category>
                <author>Mearaj.Parsa</author>
                <pubDate>Fri, 19 Jul 2024 01:16:39 +0330</pubDate>
            </item>
                    <item>
                <title>الگوهای طراحی نرم افزار یا دیزاین پترن ها</title>
                <link>https://virgool.io/IntroductionToProgramming/%D8%A7%D9%84%DA%AF%D9%88%D9%87%D8%A7%DB%8C-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%DB%8C%D8%A7-%D8%AF%DB%8C%D8%B2%D8%A7%DB%8C%D9%86-%D9%BE%D8%AA%D8%B1%D9%86-%D9%87%D8%A7-dt2obynydeih</link>
                <description>الگوهای طراحی نرم افزار یا دیزاین پترن ها میخوام راجع به الگوهای طراحی نرم افزار یا دیزاین پترن ها صحبت کنم . اینکه اصلا چی هستن و چرا باید یاد بگیریم . حقیقت اینه که شما ممکنه بتونی سالها به عنوان برنامه نویس کار کنی بدون اینکه از دیزاین پترن ها اطلاعی داشته باشی ، حتی ممکنه بعضی از این الگو هارو بدون اینکه متوجه بشی اجرا کنی . پس چرا برای یادگیریش باید وقت بگذاریم ؟!دیزاین پترن چیست ؟ببین رفیق الگوهای طراحی نرم افزار یا دیزاین پترن ها ، مجموعه روشهای آزمایش شده ای هستن که برای حل مشکلات رایج در برنامه نویسی از اونها استفاده میکنیم . دونستن این روشها بهمون یاد میده که چطور مشکلات و مسائل برنامه نویسی رو با استفاده از اصول طراحی شیءگرا حل کنیم . قبلا برنامه نویس ها برای حل مشکلاتشون روشهای مختلفی رو بارها و بارها تکرار میکردند بعد از گذشت مدتی برای اولین بار معماری به نام آقای کریستوفر الکساندر از مفهوم الگوهای طراحی استفاده کرد که در زمینه طراحی شهری بود و در اون 253 الگوی طراحی ارائه شده بود . بعد ها این مفهوم به دنیای برنامه نویسی هم وارد شد و گروهی موسوم به دسته چهار که اعضای آن رالف جانسون، ریچارد هلم، ریک گاما، جان ولیسیدز بودن ، الگو های طراحی در نرم افزار را طبقه‌بندی و تحت عنوان کتابی به نام « الگوهای طراحی : عناصر دوباره قابل استفاده نرم‌افزار شیءگرا »  در سال 1994 منتشر کردند . در حال حاظر 23 الگوی طراحی در نرم افزار وجود داره ، پس بهتره ما هم از روشهایی که قبلا تست شده و روند توسعه رو برامون آسون تر میکنه استفاده کنیم . ضمن اینکه با استفاده از الگو های طراحی در نرم افزار ما کد تمیز تر و با معماری مشخصی داریم .مزایای استفاده از الگو های طراحی ای دیزاین پترن ها استاندارد سازی‌ : دیزاین پترن ها باعث ایجاد یک مسیر و رویکرد مشترک در تیم های توسعه میشن تکرار پذیری : با استفاده از دیزاین پترن ها میتونیم کدهایی با قابلیت استفاده مجدد تولید کنیم تا در موارد مشابه از اونها استفاده بشه کاهش خطا و صرفه جویی در زمان : دیزاین پترن ها باعث میشن تکرار در توسعه و پیاده سازی نرم افزار کمتر بشه و همین امر باعث کاهش خطا و اشتباه در نرم افزار میشه قابلیت توسعه : وقتی شما از دیزاین پترن ها استفاده میکنی ساختار و منطق نرم افزارت بهبود پیدا میکنه و میتونی تغییرات و توسعه بعدی رو راحت تر انجام بدی افزایش کیفیت نرم افزار: استفاده از دیزاین پترن ها باعث میشه کیفیت و عملکرد نرم افزار بهتر بشه چون این الگو ها بر اساس تجربه های تست شده در زمینه های مختلف بدست اومدهدسته بندی دیزاین پترن هاالگو های طراحی بر اساس هدف و کاربردشون  به سه گروه تقسیم بندی میشنالگوهای سازنده (Creational Design Patterns) : برای ایجادو مدیریت شیء استفاده میشه و از وابستگی ها و جزئیات پیچیده در برنامه نویسی شیء گرا جلوگیری میکنه . الگوهای سازنده 6 بخش مختلف دارهالگوهای ساختاری (Structural Design Patterns) : الگوهای ساختاری همونطور که از اسمش هم پیداست برای ساختار دهی و ایجاد ارتباط بین عناصر مختلف استفاده میشه این الگو بهمون اجازه میده تا روابط بین اشیاء و کلاسها رو بهبود ببخشیم و ساختار سیستم رو برای قابل توسعه کنیمالگوهای رفتاری (Behavioral Design Patterns) : این دسته الگو هم به منظور مدیریت رفتار و ارتباط بین اشیاء و کلاسها استفاده میشه . با استفاده از این الگوها میتونیم تغییرات رو در رفتار برنامه بصورت انعطاف پذیر اعمال کنیمتوی مطلب بعدی راجع به گروه الگوهای سازنده بهت توضیح میدم . ضمنا توی کانال آپارات هم آموزش هر بخش رو قرار میدم میتونی اونجا همراه با مثال آموزش ببینی مراقب خودت باش یاعلی :)</description>
                <category>Mearaj.Parsa</category>
                <author>Mearaj.Parsa</author>
                <pubDate>Wed, 13 Sep 2023 17:55:05 +0330</pubDate>
            </item>
            </channel>
</rss>