O'rnatish, birinchi server, qanday ishlaydi
O'rnatish
mkdir my-api
cd my-api
npm init -y
npm install express
npm init -y — package.json ni standart sozlamalar bilan yaratadi. -y — barcha savollarga "ha" deydi.
Birinchi server
app.js fayli yarating:
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('Salom, dunyo!');
});
app.listen(PORT, () => {
console.log(`Server http://localhost:${PORT} da ishlamoqda`);
});
Ishga tushirish:
node app.js
# Server http://localhost:3000 da ishlamoqda
Brauzerda http://localhost:3000 ga kiring — Salom, dunyo! ko'rinadi.
Bu kod qanday ishlaydi?
Har bir qatorni tushuntiramiz.
const app = express() — Express ilovasini yaratadi. app — bu butun serveringiz. Unga route lar, middleware lar qo'shiladi.
app.get('/', handler) — "Kimdir GET / so'rov yuborganda, handler funksiyasini chaqir" deydi. handler ikki argument oladi: req (so'rov) va res (javob).
res.send('Salom, dunyo!') — mijozga matn yuboradi. Content-Type ni avtomatik text/html qilib qo'yadi.
app.listen(PORT, callback) — serverni ishga tushiradi. PORT da tinglaydi. Tayyor bo'lgach callback chaqiriladi.
So'rov kelganda nima bo'ladi?
Brauzer: GET http://localhost:3000/
↓
Express: "/ ga GET so'rov keldi"
↓
Express: "app.get('/') bor — handler ni chaqir"
↓
handler: res.send('Salom, dunyo!')
↓
Brauzer: 'Salom, dunyo!' ko'rsatiladi
Express so'rovni qabul qilib, to'g'ri handler ga yo'naltiradi. Bu — routing.
nodemon — avtomatik qayta ishga tushirish
Har safar kod o'zgarganda node app.js ni qayta ishga tushirish — zerikarli. nodemon buni avtomatik qiladi:
npm install -D nodemon
package.json ga script qo'shing:
{
"scripts": {
"dev": "nodemon app.js",
"start": "node app.js"
}
}
npm run dev
Endi app.js ni saqlasangiz — nodemon avtomatik qayta ishga tushiradi.
dev — development uchun (nodemon bilan). start — production uchun (oddiy node bilan).
JSON javob qaytarish
Hozirgi veb ilovalar ko'pincha JSON bilan ishlaydi. res.json() — ob'ektni JSON ga aylantirib yuboradi:
app.get('/users', (req, res) => {
const users = [
{ id: 1, name: 'Ali', email: 'ali@example.com' },
{ id: 2, name: 'Vali', email: 'vali@example.com' },
];
res.json(users);
});
http://localhost:3000/users ga kirsangiz:
[
{ "id": 1, "name": "Ali", "email": "ali@example.com" },
{ "id": 2, "name": "Vali", "email": "vali@example.com" }
]
res.json() avtomatik Content-Type: application/json header qo'yadi.
Loyiha tuzilmasi
Hozircha hamma narsa app.js da. Kichik loyiha uchun yaxshi. Lekin loyiha o'sganda — alohida fayllar kerak bo'ladi. Kurs davomida quyidagi tuzilmaga kelamiz:
my-api/
├── src/
│ ├── routes/ ← route lar
│ ├── controllers/ ← so'rov boshqarish
│ ├── services/ ← biznes logika
│ ├── middleware/ ← middleware lar
│ └── app.js ← Express sozlash
├── .env ← muhit o'zgaruvchilari
├── .gitignore
└── package.json
Hozircha oddiy app.js bilan boshlaymiz — tuzilma keyingi darslarda paydo bo'ladi.
Tez-tez uchraydigan xatolar
Port band:
Error: listen EADDRINUSE: address already in use :::3000
3000-port boshqa jarayon tomonidan ishlatilmoqda. Yechim: boshqa port ishlatish yoki band jarayonni to'xtatish:
# Linux/macOS:
lsof -ti:3000 | xargs kill
require xatosi:
Error: Cannot find module 'express'
npm install express qilinmagan yoki noto'g'ri papkada. node_modules papkasi bor-yo'qligini tekshiring.
app.listen dan keyin route qo'shish:
app.listen(3000); // server ishga tushdi
app.get('/users', ...); // bu ishlaydi, lekin yomon uslub
Barcha route lar app.listen dan oldin yoziladi.
Xulosa
Express o'rnatish — npm install express. Server yaratish — express(), route qo'shish — app.get/post/..., ishga tushirish — app.listen().
So'rov kelganda Express to'g'ri handler ni topib chaqiradi. req — so'rov ma'lumotlari, res — javob yuborish uchun.
Keyingi dars
3-dars: Routing — GET, POST, PUT, PATCH, DELETE