Express asoslari
Sof http moduli bilan server yozish mumkin, lekin marshrutlash, so'rov tanasini o'qish va boshqa oddiy ishlar juda ko'p qo'l mehnatini talab qiladi. Express โ bu ishlarni soddalashtiradigan, Node.js uchun eng mashhur veb-freymvork. Ushbu darsda Express asoslarini o'rganamiz.
Nega Express?
Express โ Node.js uchun minimalist va moslashuvchan veb-freymvork. U sof http moduli ustiga qulay qatlam qo'shadi:
- Sodda marshrutlash โ
app.get,app.postkabi aniq funksiyalar; - Middleware โ so'rovni bosqichma-bosqich qayta ishlash tizimi;
- Qulay javob metodlari โ
res.send,res.jsonkabilar; - Katta ekotizim โ minglab tayyor plaginlar va o'rgatuvchi materiallar.
Bir xil vazifani sof http va Express'da solishtiring โ Express kodi ancha qisqa va tushunarli. Aynan shuning uchun Express dunyoda eng ko'p ishlatiladigan Node.js freymvorklaridan biri.
O'rnatish
Express โ tashqi paket, shuning uchun uni npm orqali o'rnatish kerak. Avval loyiha yarating:
mkdir mening-serverim
cd mening-serverim
npm init -y
npm install express
Endi Express loyihangizda mavjud va uni koddan import qilishingiz mumkin.
Birinchi ilova
Eng oddiy Express ilovasini yozamiz. index.js fayli yarating:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Salom, Express!');
});
app.listen(3000, () => {
console.log('Server ishga tushdi: http://localhost:3000');
});
Ishga tushiring va brauzerda oching:
node index.js
Kodni qadam-baqadam ko'raylik:
express()โ yangi ilova (app) obyektini yaratadi;app.get('/', ...)โ bosh sahifaga (/) GET so'rovi kelganda ishlaydigan funksiyani belgilaydi;res.send(...)โ javob jo'natadi;app.listen(3000)โ serverni 3000-portda ishga tushiradi.
app obyekti โ bu butun ilovangizning markazi. Unga marshrutlar (routes), middleware'lar va sozlamalar qo'shiladi. An'anaviy ravishda u app deb nomlanadi.Route (marshrut) nima?
Route (marshrut) โ bu "qanday so'rovga qanday javob berish" qoidasi. U ikki qismdan iborat: HTTP metodi (GET, POST...) va manzil (path).
Express'da har bir metod uchun alohida funksiya bor:
app.get('/users', (req, res) => {
res.send('Foydalanuvchilar ro'yxati');
});
app.post('/users', (req, res) => {
res.send('Yangi foydalanuvchi qo'shildi');
});
app.get('/about', (req, res) => {
res.send('Biz haqimizda sahifa');
});
Bir manzilga turli metodlar bilan turli javob berish mumkin. Masalan, /usersga GET so'rovi ro'yxatni qaytaradi, POST so'rovi esa yangisini qo'shadi. Bu REST API'ning asosi (keyingi darsda batafsil).
req obyekti
req (request) obyekti kiruvchi so'rov haqidagi barcha ma'lumotni saqlaydi. Eng ko'p ishlatiladigan xossalari:
req.paramsโ URL parametrlari (masalan,/users/:id);req.queryโ so'rov qatoridagi parametrlar (?sort=asc);req.bodyโ so'rov tanasi (POST/PUT ma'lumoti);req.methodโ so'rov metodi (GET, POST...);req.urlโ so'ralgan manzil;req.headersโ so'rov sarlavhalari.
app.get('/salom', (req, res) => {
console.log('Metod:', req.method); // GET
console.log('URL:', req.url); // /salom?ism=Ali
console.log('Query:', req.query); // { ism: 'Ali' }
res.send('Salom, ' + req.query.ism);
});
res obyekti: send va json
res (response) obyekti orqali brauzerga javob jo'natasiz. Express bir necha qulay metod beradi:
res.send() โ universal javob metodi. U berilgan turga qarab avtomatik ravishda to'g'ri Content-Typeni o'rnatadi:
app.get('/matn', (req, res) => {
res.send('Oddiy matn'); // text/html
});
app.get('/html', (req, res) => {
res.send('<h1>Sarlavha</h1>'); // HTML
});
res.json() โ maxsus JSON javob uchun. U obyektni avtomatik JSON'ga o'giradi va Content-Type: application/jsonni o'rnatadi. API'larda aynan shu ishlatiladi:
app.get('/api/user', (req, res) => {
res.json({
ism: 'Ali',
yosh: 25,
faol: true
});
});
// Brauzerga: {"ism":"Ali","yosh":25,"faol":true}
Boshqa foydali res metodlari:
res.status(404)โ HTTP status kodini o'rnatadi (zanjirlanadi);res.redirect('/boshqa')โ boshqa manzilga yo'naltiradi;res.sendFile(yol)โ faylni jo'natadi.
app.get('/topilmadi', (req, res) => {
res.status(404).json({ xato: 'Topilmadi' });
});
res.status(...) metodi res obyektini qaytaradi, shuning uchun uni .json() yoki .send() bilan zanjirlab yozish mumkin: res.status(201).json(...).Har bir so'rovga javob shart
Muhim qoida: har bir route funksiyasi javobni yakunlashi shart โ res.send, res.json, res.end yoki shunga o'xshash metod bilan. Aks holda so'rov "osilib" qoladi va brauzer javobni cheksiz kutadi.
res.send(...)dan keyin yana res.send(...) yozsangiz, ERR_HTTP_HEADERS_SENT xatosi chiqadi. Javobdan keyin funksiyadan chiqish uchun ko'pincha return ishlatiladi.Xulosa
- Express โ Node.js uchun mashhur, minimalist veb-freymvork; sof
httpni ancha soddalashtiradi; - Uni
npm install expressbilan o'rnatiladi,const app = express()bilan ilova yaratiladi; app.get,app.postkabi metodlar bilan routelar belgilanadi;reqโ so'rov ma'lumoti (params,query,body),resโ javob;res.sendโ universal javob,res.jsonโ JSON javob,res.statusโ status kod;- Har bir route javobni yakunlashi shart va javob faqat bir marta jo'natiladi.