Brauzer faqat fasadni (UI) ko'rsatadi. IT tizimlarining haqiqiy kuchi — biznes mantiq, maxfiy kalitlar va ma'lumotlar bazasi — Serverda yashaydi. Bugungi darsda biz Node.js va Express yordamida birinchi serverimizni yozamiz, HTTP (GET, POST, PUT, DELETE) siklini o'rganamiz, SQL bazani API ga ulaymiz va interaktiv studiyada jonli sinovdan o'tkazamiz.
balance = 9999999 deb kodni o'zgartirib yuborishi mumkin..env fayli faqat serverda ishlaydi, mijoz ularni ko'ra olmaydi.req.body da yuboriladi.Content-Type: application/jsonres.json({ success: true, data: [...] })Avvallari JavaScript faqat brauzer ichida yashardi. 2009-yilda Ryan Dahl Google V8 dvigatelini olib, Node.js muhitini yaratdi. Endi bitta tilda (JS) ham brauzer interfeysini, ham quvvatli serverni yozish mumkin!
// 1. Kutubxonani yuklash
const express = require('express');
const app = express();
// 2. JSON tahlil qiluvchi Middleware
app.use(express.json());
// 3. Birinchi GET marshrut
app.get('/api/ping', (req, res) => {
res.json({ message: 'pong 🏓', time: Date.now() });
});
// 4. Serverni 3000-portda tinglash
app.listen(3000, () => {
console.log('🚀 Server http://localhost:3000 da ishga tushdi!');
});
:id)Aniq bitta obyektni Primary Key bo'yicha olish uchun ishlatiladi:
app.get('/api/products/:id', (req, res) => {
const productId = req.params.id;
// Masalan: /api/products/42 => productId = "42"
res.json({ id: productId, status: 'Topildi' });
});
req.query)Ro'yxatlarni qidirish, saralash va sahifalash uchun ishlatiladi:
app.get('/api/products', (req, res) => {
const category = req.query.cat;
const limit = req.query.limit || 10;
// Masalan: /api/products?cat=laptops&limit=5
res.json({ category, limit });
});
Standart holatda Express tarmoqdan kelayotgan JSONni xom baytlar oqimi deb biladi. Agar app.use(express.json()) yozilmasa, req.body bo'sh qoladi!
Mijoz yuborgan har bir maydon tekshirilishi shart. Noto'g'ri bo'lsa darhol 400 Bad Request qaytaramiz:
app.post('/api/products', (req, res) => {
const { name, price, stock } = req.body;
// 1. Validatsiya tekshiruvi
if (!name || !price || price <= 0) {
return res.status(400).json({
error: "Nom va musbat narx kiritilishi shart!"
});
}
// 2. Muvaffaqiyatli yaratish (201 Created)
const newProduct = { id: Date.now(), name, price, stock: stock || 0 };
res.status(201).json(newProduct);
});
18-darsda biz konsolda SQL so'rovlar yozgan edik. Endi o'sha so'rovlar Express marshrutlari ichida yashaydi! Server so'rovni qabul qiladi, SQL yordamida bazadan oladi va JSON qilib brauzerga uzatadi.
Hech qachon satrlarni ulab yozmang! Doimo parametrli qoliplardan (?) foydalaning.
// Barcha mijozlarni bazadan olish
app.get('/api/users', (req, res) => {
const rows = db.query('SELECT id, full_name, email, balance FROM users');
res.json(rows);
});
// ID bo'yicha bitta mijozni xavfsiz qidirish
app.get('/api/users/:id', (req, res) => {
const user = db.queryOne(
'SELECT * FROM users WHERE id = ?',
[req.params.id]
);
if (!user) {
return res.status(404).json({ error: 'Mijoz topilmadi' });
}
res.json(user);
});
Foydalanuvchi tugmani bosadi: brauzer POST /api/orders so'rovini yuboradi.
Express method va URL ni tekshiradi, JSONni req.body obyektiga aylantiradi.
Server tekshiruvdan so'ng xavfsiz INSERT INTO orders so'rovini bajaradi.
Server 201 Created kodi va chek ma'lumoti bilan javob qaytaradi.
GET, POST va DELETE marshrutlarini yozing.shop.db jadvallaridan ma'lumot oling va yangi yozuv qo'shing.GET /api/products so'rovini yuboringPOST /api/products orqali yangi mahsulot qo'shing (201)Alomati: Brauzer aylanaveradi va timeout xatosi beradi.
Sababi: res.json() yoki res.send() yozish unutilgan! Mijoz javobni kutib qotib qoladi.
Alomati: Konsolda ERR_HTTP_HEADERS_SENT xatosi.
Sababi: Bitta marshrutda returnsiz 2 marta res.json() chaqirildi! Yechim: doimo return res.json(...) yozing.
Alomati: req.params.id === 1 doimo false beradi!
Sababi: URL parametrlari matn ('1') bo'lib keladi. Yechim: parseInt(req.params.id, 10) orqali songa o'giring.
lab/index.html dagi barcha 6 kvestni bajaring.GET /api/search?q=... yozing.