NestJS Framework — tuzilishi, o'rnatish, CLI
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-specflag qo'shmasangiz — har bir buyruq avtomatik test fayli ham yaratadi (users.controller.spec.tskabi). Test yozmasangiz,--no-specbilan 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 uchuncontrollers— bu modulga tegishli controllerlarproviders— 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