O'rnatish, birinchi server, qanday ishlaydi

~15 daq · Express · Kirish va Asoslar

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