NestJS Framework — tuzilishi, o'rnatish, CLI

~20 daq · NestJS · Boshlang'ich daraja

NestJS nima va nima uchun kerak?

Tasavvur qiling: siz birinchi marta katta loyiha yozayapsiz. Express.js da boshladingiz — fayllar ko'payib ketdi, qaysi fayl nima qilishini unutdingiz, kod tartibsiz bo'lib qoldi. Bir oydan keyin o'z kodingizga qarasangiz — hech narsani tushunmaysiz.

Aynan shu muammoni hal qilish uchun NestJS yaratilgan.

NestJS — Node.js ustida ishlaydigan backend framework. Lekin oddiy framework emas. U sizga loyihani qanday tuzish kerakligini o'rgatadi. Har bir narsa o'z joyida, har bir fayl o'z vazifasini bajaradi.

💡 NestJS ichida Express.js ishlaydi. Ya'ni siz Express ni o'rganib, undan keyin NestJS o'rgansangiz — bu juda to'g'ri yo'l. NestJS Express ni "tartibga solib" beradi.


NestJS kimlar tomonidan ishlatiladi?

Bu savol muhim — chunki ko'pchilik "yangi texnologiya ishlataman" deb keyin hech kim ishlatmaydigan narsani o'rganib qoladi.

NestJS ni hozir:

  • Adidas — sport tovarlar giganti
  • Roche — farmatsevtika kompaniyasi
  • Decathlon — sport do'konlari tarmog'i
  • Ko'plab startaplar va enterprise kompaniyalar

ishlatadi. Bu degani — bozorda NestJS biluvchi dasturchilar talab qilinadi.


NestJS ning asosiy g'oyasi

NestJS Angular dan ilhom olgan. Angular frontend framework, NestJS esa backend. Ikkalasi ham bir xil tuzilishga ega — bu tasodifiy emas.

NestJS dagi eng asosiy tushuncha: hamma narsa modul. Loyihangiz kichik-kichik bloklarga bo'linadi. Har bir blok — alohida modul. Modullar bir-biri bilan bog'lanadi.

Loyiha
├── UsersModule    → foydalanuvchilar bilan bog'liq hamma narsa
├── ProductsModule → mahsulotlar bilan bog'liq hamma narsa
├── OrdersModule   → buyurtmalar bilan bog'liq hamma narsa
└── AppModule      → hammasini birlashtiruvchi bosh modul

Har bir modul ichida esa uchta asosiy narsa bo'ladi:

Controller — foydalanuvchidan so'rov qabul qiladi. /users, /products kabi URL larga kelgan so'rovlar shu yerga tushadi.

Service — biznes logika shu yerda. Ma'lumotni qayta ishlash, hisoblash, tekshirish — hammasi shu yerda.

Module — controller va service ni birlashtiradi, boshqa modullar bilan bog'laydi.


O'rnatish

Talab qilinadigan dasturlar

Boshlashdan oldin kompyuteringizda quyidagilar bo'lishi kerak:

  • Node.js (18 yoki undan yuqori versiya)
  • npm yoki yarn

Tekshirish uchun terminalda:

node --version
npm --version

Agar o'rnatilmagan bo'lsa — nodejs.org dan yuklab oling.

NestJS CLI o'rnatish

CLI — Command Line Interface. Bu NestJS ning yordamchi qurilmasi. Uni bir marta global o'rnatilsa — istalgan joyda ishlatish mumkin.

npm install -g @nestjs/cli

CLI o'rnatilgandan keyin quyidagi buyruq bilan tekshiring:

nest --version

Birinchi loyiha yaratish

nest new my-project

Bu buyruqni ishga tushirgandan keyin CLI sizdan paket menejerini so'raydi:

? Which package manager would you ❤️ to use?
  npm
❯ yarn
  pnpm

Hozircha npm ni tanlang. Enter bosing.

CLI o'zi hamma narsani yaratadi — papkalar, fayllar, bog'liqliklar. Bir necha daqiqa kutasiz.


Loyiha tuzilishi

Yaratilgan loyihaga qarang:

my-project/
├── src/
│   ├── app.controller.ts      ← birinchi controller
│   ├── app.controller.spec.ts ← test fayli
│   ├── app.module.ts          ← bosh modul
│   ├── app.service.ts         ← birinchi service
│   └── main.ts                ← dastur shu yerdan boshlanadi
├── test/
├── node_modules/
├── package.json
├── tsconfig.json
└── nest-cli.json

Eng muhim fayl — main.ts. Keling, uni ochib ko'ramiz:

import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

Bu faylda nima bo'layapti? NestFactory.create(AppModule) — NestJS ilovasini yaratadi. app.listen(3000) — server 3000-portda ishga tushadi. Shu ikki qator — butun dasturning boshlanishi.


Loyihani ishga tushirish

cd my-project
npm run start:dev

start:dev — development rejimi. Bu rejimda kod o'zgarganda server avtomatik qayta ishga tushadi. Juda qulay.

Terminalda quyidagini ko'rsangiz — hammasi to'g'ri:

[Nest] LOG [NestApplication] Nest application successfully started

Endi brauzerda http://localhost:3000 ga kiring. Hello World! ni ko'rasiz.


CLI ning qolgan buyruqlari

CLI faqat loyiha yaratish uchun emas. Siz u bilan modul, controller, service va boshqa fayllarni ham yarata olasiz.

Har bir buyruqning to'liq va qisqa shakli bor:

nest generate module users     # to'liq shakl
nest g mo users                # qisqa shakl — ikkalasi bir xil ishlaydi

Hammasi bittada — nest g resource

Eng qulay usul — resource buyrug'i. Bir buyruq bilan modul, controller, service, DTO va entity fayllarini birdaniga yaratadi:

nest g resource users --no-spec

CLI sizdan transport turini so'raydi:

? What transport layer do you use?
❯ REST API
  GraphQL (code first)
  GraphQL (schema first)
  Microservice (non-HTTP)
  WebSockets

REST API ni tanlang. Keyin:

? Would you like to generate CRUD entry points? (Y/n)

Y bosing. Natijada quyidagi fayllar yaratiladi:

src/users/
├── users.module.ts
├── users.controller.ts
├── users.service.ts
├── dto/
│   ├── create-user.dto.ts
│   └── update-user.dto.ts
└── entities/
    └── user.entity.ts

Hammasi tayyor, hammasi bir-biriga ulangan. Siz faqat ichini to'ldirasiz.


Alohida fayllar yaratish

Katta loyihalarda ba'zan faqat bitta fayl kerak bo'ladi:

# Modul yaratish — users.module.ts
nest g mo users

# Controller yaratish — users.controller.ts
nest g co users --no-spec

# Service yaratish — users.service.ts
nest g s users --no-spec

# Guard yaratish — users.guard.ts
nest g gu users --no-spec

# Pipe yaratish — users.pipe.ts
nest g pi users --no-spec

# Interceptor yaratish — users.interceptor.ts
nest g itc users --no-spec

# Middleware yaratish — users.middleware.ts
nest g mi users --no-spec

# Filter yaratish — users.filter.ts
nest g f users --no-spec

⚠️ --no-spec flag qo'shmasangiz — har bir buyruq avtomatik test fayli ham yaratadi (users.controller.spec.ts kabi). Test yozmasangiz, --no-spec bilan ishlang.

CLI faylni yaratibgina qolmaydi — kerakli modulga avtomatik ulaydi ham. Masalan, nest g co users controller ni yaratib, users.module.ts dagi controllers massiviga o'zi qo'shadi.


app.module.ts ga bir nazar

import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

@Module — bu decorator. NestJS da decoratorlar juda ko'p ishlatiladi. Ular @ belgisi bilan boshlanadi. Bu decorator NestJS ga "bu sinf modul" deb aytadi.

Ichidagi uchta narsa:

  • imports — boshqa modullarni bu yerga ulash uchun
  • controllers — bu modulga tegishli controllerlar
  • providers — bu modulga tegishli servicelar

Xulosa

Siz hozir NestJS ning eng muhim qismini tushundingiz — loyiha qanday tuzilishi. Bu poydevor. Keyingi darslarda controller, provider, module larni alohida-alohida chuqur o'rganamiz.

Bir gapda aytganda: NestJS — bu Express ustiga qurilgan, loyihani tartibli va kengaytiriladigan qilib yozish uchun yaratilgan framework.


Keyingi dars

2-dars: Controller — Routing, Request, Response