Built-in Middleware — express.json, express.urlencoded
Built-in middleware nima?
Express o'zi bir nechta tayyor middleware bilan keladi — alohida o'rnatish shart emas. Ularni express.something() ko'rinishida ishlatiladi.
Asosiy ikki tasi: express.json() va express.urlencoded(). Ikkalasi ham so'rovning body qismini o'qib, req.body ga yuklaydi.
Body nima uchun parse qilish kerak?
HTTP so'rovining body qismi — xom matn (string) sifatida keladi. Node.js uni stream orqali bo'laklarga bo'lib o'qiydi. Bu xom ma'lumotni JavaScript ob'ektiga aylantirish — parsing.
Parse qilinmasa:
app.post('/users', (req, res) => {
console.log(req.body); // undefined
});
Parse qilinsa:
app.use(express.json());
app.post('/users', (req, res) => {
console.log(req.body); // { name: 'Ali', email: 'ali@example.com' }
});
express.json() — JSON body uchun
Mijoz Content-Type: application/json header bilan JSON yuborayotganda ishlatiladi. React, Vue, mobil ilovalar — barchasi JSON yuboradi.
app.use(express.json());
Shu bir qator — barcha so'rovlarda JSON body avtomatik parse qilinadi.
// Mijoz yuboradi:
// POST /users
// Content-Type: application/json
// Body: {"name":"Ali","email":"ali@example.com","age":25}
app.post('/users', (req, res) => {
const { name, email, age } = req.body;
// name = 'Ali', email = 'ali@example.com', age = 25
res.status(201).json({ id: Date.now(), name, email, age });
});
Hajm cheklash:
Standart bo'yicha 100 KB gacha body qabul qilinadi. Katta JSON uchun:
app.use(express.json({ limit: '10mb' }));
express.urlencoded() — HTML form uchun
HTML <form> submit qilganda — brauzer Content-Type: application/x-www-form-urlencoded bilan yuboradi. Bu format:
name=Ali&email=ali%40example.com&age=25
express.urlencoded() buni parse qilib req.body ga yuklaydi:
app.use(express.urlencoded({ extended: true }));
<!-- HTML form -->
<form method="POST" action="/users">
<input name="name" value="Ali" />
<input name="email" value="ali@example.com" />
<button type="submit">Yuborish</button>
</form>
app.post('/users', (req, res) => {
console.log(req.body); // { name: 'Ali', email: 'ali@example.com' }
});
extended: true nima?
extended: false — oddiy ob'ektlar uchun (qs o'rniga querystring ishlatadi).
extended: true — ichma-ich ob'ektlar va massivlar uchun (qs ishlatadi).
Zamonaviy loyihalarda extended: true ishlatiladi.
Ikkalasini birga ishlatish
API va HTML form ikkalasini qo'llab-quvvatlash uchun:
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
Express Content-Type header ga qarab to'g'ri parser ni ishlatadi.
express.static() — eslatma
Oldingi darsda ko'rilgan express.static() ham built-in middleware:
app.use(express.static(path.join(__dirname, 'public')));
Tez-tez uchraydigan xatolar
Middleware ni route dan keyin qo'yish:
app.post('/users', (req, res) => {
console.log(req.body); // undefined!
});
app.use(express.json()); // kech — yuqoridagi route ga ta'sir qilmaydi
Middleware har doim route lardan oldin yoziladi.
JSON bo'lmagan body uchun express.json() kutish:
// Mijoz form yubordi (urlencoded), lekin faqat json middleware bor:
app.use(express.json());
app.post('/form', (req, res) => {
console.log(req.body); // undefined — urlencoded parse qilinmadi
});
Har ikki middleware ham qo'shiladi.
Xulosa
express.json() — JSON body ni parse qiladi. API larda har doim kerak.
express.urlencoded({ extended: true }) — HTML form body ni parse qiladi.
Ikkalasi ham req.body ni to'ldiradi. Route lardan oldin yoziladi.
Keyingi dars
9-dars: Third-party Middleware — morgan, compression, cors