NestJS nima?
Agar siz Node.js va Express bilan bir necha loyiha yozgan bo'lsangiz, ehtimol bitta muammoga duch kelgansiz: loyiha kattalashgani sari kod tartibsiz bo'lib boradi. Route'lar, biznes-logika va ma'lumotlar bazasi so'rovlari bir joyga aralashib ketadi. NestJS aynan shu muammoni hal qilish uchun yaratilgan โ u sizga qat'iy va tushunarli arxitektura, TypeScript'ning to'liq kuchi va tayyor infratuzilma beradi.
NestJS nima va u qanday muammoni hal qiladi?
NestJS (odatda shunchaki Nest deb ataladi) โ bu Node.js muhitida server tomonidagi ilovalarni yaratish uchun mo'ljallangan framework. U TypeScript'da yozilgan va TypeScript bilan ishlashga to'liq moslashtirilgan (garchi sof JavaScript'da ham yozish mumkin bo'lsa-da).
Express o'zi juda minimalist โ u sizga faqat route va middleware beradi, qolgani sizning ixtiyoringizda. Bu erkinlik kichik loyihalar uchun yaxshi, lekin katta jamoada har kim o'z uslubida yozsa, loyiha boshqarib bo'lmas holga keladi. NestJS esa qarama-qarshi yondashuvni tanlaydi: u fikrli (opinionated) framework โ ya'ni kodni qanday tashkil qilishni aniq belgilaydi.
- Modulli arxitektura: kod mantiqiy modullarga bo'linadi, har biri o'z mas'uliyat sohasiga ega;
- Dependency Injection (DI): obyektlar orasidagi bog'liqliklar avtomatik boshqariladi;
- Dekoratorlar:
@Controller,@Get,@Injectablekabi qulay belgilar orqali kod deklarativ yoziladi; - Tayyor infratuzilma: validatsiya, guard, interceptor, exception filter, testlash โ hammasi qutidan chiqadi;
- Platformadan mustaqillik: ostida Express yoki Fastify ishlashi mumkin, kodingiz o'zgarmaydi.
NestJS Express ustida qanday ishlaydi?
Bu tushunish uchun juda muhim nuqta: NestJS Express'ni almashtirmaydi, balki uning ustiga qurilgan qatlamdir. Standart holatda NestJS ichida haqiqiy Express ilovasi ishlaydi. Ya'ni siz yozgan controller'lar oxir-oqibat Express route'lariga aylanadi, guard'lar va interceptor'lar esa Express middleware'lariga o'xshab ishlaydi.
Bu shuni anglatadiki, Express ekotizimidagi ko'plab paketlar (masalan, helmet, cookie-parser) NestJS bilan ham ishlaydi. Kerak bo'lsa, siz hatto asosiy Express request va response obyektlariga to'g'ridan-to'g'ri kirishingiz mumkin.
NestJS shuningdek Express o'rniga Fastify adapterini ishlatishga imkon beradi โ bu tezroq HTTP kutubxona. Muhimi: sizning controller va service kodingiz o'zgarmaydi, faqat pastdagi "dvigatel" almashadi. Bu abstraksiya NestJS'ning kuchli tomonlaridan biri.
Angular'dan ilhom: nega bu muhim?
NestJS'ning arxitekturasi Angular (frontend framework) ta'sirida shakllangan. Agar siz Angular bilan tanish bo'lsangiz, NestJS'dagi modul, servis, dekorator va Dependency Injection tushunchalari juda tanish tuyuladi.
Bu tanlov tasodifiy emas. Angular yirik jamoalarda katta ilovalarni yillar davomida barqaror tarzda rivojlantirish uchun mo'ljallangan. Xuddi shu maqsad NestJS oldida ham turadi โ backend tomonda uzoq muddatli, kengaytiriladigan va sinovdan o'tkaziladigan kod yozish. Frontend va backend bir xil arxitektura tamoyillariga tayangani jamoa uchun bilim almashishni osonlashtiradi.
Node.js CLI orqali o'rnatish
NestJS bilan ishlashning eng qulay yo'li โ uning rasmiy buyruq qatori vositasi, ya'ni Nest CLI orqali. U yangi loyihani tayyor tuzilma bilan yaratadi va kod generatsiya qilishni osonlashtiradi. Uni global o'rnatamiz:
# Nest CLI'ni global o'rnatish:
npm install -g @nestjs/cli
# O'rnatilganini tekshirish:
nest --version
Endi yangi loyiha yaratamiz. nest new buyrug'i papka yaratadi, barcha kerakli paketlarni o'rnatadi va boshlang'ich kodni tayyorlaydi:
# Yangi loyiha yaratish:
nest new mening-ilovam
# CLI paket menejerini so'raydi (npm, yarn yoki pnpm) โ birini tanlang.
# Loyiha papkasiga o'tib, uni ishga tushirish:
cd mening-ilovam
npm run start:dev
start:dev rejimi watch bilan ishlaydi: siz faylni saqlagan zahoti server avtomatik qayta yuklanadi. Ilova standart holatda http://localhost:3000 manzilida ochiladi. Brauzerda ushbu manzilni ochsangiz, oddiy "Hello World!" javobini ko'rasiz.
nest generate (qisqacha nest g) orqali modul, controller, service kabi qismlarni bir buyruq bilan yaratib beradi va ularni loyihaga avtomatik ulaydi.Loyihaning boshlang'ich tuzilishi
nest new yaratgan loyihada eng muhim fayllar src/ papkasida joylashadi. Ular bilan keyingi darslarda batafsil tanishamiz, lekin hozircha umumiy manzarani ko'ramiz:
mening-ilovam/
src/
app.controller.ts # Oddiy controller (route'lar)
app.controller.spec.ts # Controller uchun test
app.service.ts # Biznes-logika (service)
app.module.ts # Ildiz modul โ hammani bog'laydi
main.ts # Kirish nuqtasi (ilova shu yerdan boshlanadi)
test/ # e2e testlar
package.json
tsconfig.json
nest-cli.json
Kirish nuqtasi โ bu main.ts. Uni ochsak, NestJS ilovasi qanday boshlanishini ko'ramiz. Bu Express'dagi app.listen() ga o'xshaydi, lekin biroz boshqacharoq:
// src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
// Ildiz moduldan ilova yaratamiz:
const app = await NestFactory.create(AppModule);
// 3000-portda tinglashni boshlaymiz:
await app.listen(3000);
}
bootstrap();
E'tibor bering: Express'da biz express() chaqirib, so'ng route'larni qo'lda qo'shardik. NestJS'da esa biz faqat ildiz modulni (AppModule) beramiz, qolgani avtomatik yig'iladi. Bu modulli arxitekturaning birinchi ko'rinishi.
NestJS qachon kerak va qachon ortiqcha?
NestJS kuchli vosita, lekin har bir loyiha uchun to'g'ri tanlov emas. Uni tanlashda quyidagilarni hisobga oling:
NestJS mos keladigan holatlar
- Katta yoki o'sib boradigan loyihalar โ ko'p modul, ko'p endpoint;
- Jamoa bilan ishlash โ qat'iy tuzilma har kimga bir xil qoidalar beradi;
- Murakkab biznes-logika, ma'lumotlar bazasi, autentifikatsiya, mikroservislar;
- TypeScript'ni to'liq ishlatmoqchi bo'lganingizda;
- Uzoq muddatli qo'llab-quvvatlanadigan korporativ ilovalar.
NestJS ortiqcha bo'lishi mumkin bo'lgan holatlar
- Bir-ikki endpoint'li juda kichik skript yoki prototip;
- Tez sinab ko'rish uchun yozilgan bir martalik kod;
- Jamoa Express'ni yaxshi biladi va qo'shimcha o'rganishga vaqt yo'q bo'lganda.
Xulosa
- NestJS โ Node.js uchun modulli va fikrli backend framework, TypeScript uchun mo'ljallangan;
- U Express ustida ishlaydi (yoki Fastify), lekin qat'iy arxitektura va tayyor infratuzilma qo'shadi;
- Arxitekturasi Angular'dan ilhomlangan: modullar, service'lar, dekoratorlar, Dependency Injection;
- O'rnatish
npm install -g @nestjs/clivanest neworqali amalga oshadi; - Kirish nuqtasi
main.ts, ildiz modul esaAppModule; - NestJS katta va o'sib boradigan loyihalar uchun ideal, juda kichik skriptlar uchun esa ortiqcha bo'lishi mumkin.