Mundarija (21)
- Bu darsda
- 1. Nega bu kerak?
- 2. Async xatolar
- 2.1 Express 4 dagi muammo
- 2.2 Express 5 ichida nima bo'ladi
- 2.3 Express 5 ham ushlay olmaydigan xato
- 3. Yangi route sintaksisi (path-to-regexp 8)
- 3.1 Nima o'zgardi
- 3.2 Yangi sintaksis — biz sinagan misollar
- 4. Boshqa buzilishlar: ro'yxat
- 5. Ko'chish tartibi
- 6. API qadami: async ishlovchilar (holat 17, 2-qism)
- 7. Ko'p uchraydigan xatolar
- 8. Mashqlar
- 1-mashq (oson): yangi naqsh
- 2-mashq (o'rta): try/catch siz ishlovchi
- 3-mashq (qiyin): ko'chish auditi
- 4-mashq: API qadami
- 9. Real ishda
- Xulosa
- Manbalar
Express 5: async xatolar, yangi route sintaksisi va 4 dan ko'chish
Qisqacha: Express 5 async ishlovchidagi
throwni va rad etilgan Promise'ni o'zi xato middleware'iga yuboradi — Express 4 da esa so'rov osilib qolardi. Marshrut (route) naqshlari path-to-regexp 8 ga o'tdi:*o'rniga/*splat,:id?o'rniga{/:id}, naqsh ichida regex yo'q. Eski naqsh endi ilova ishga tushgandaPathErrorberadi.app.del,req.param,res.redirect("back")olib tashlandi,express-async-errorspaketi esa kerak emas.
Bu darsda
- Express 5 async xatoni qanday ushlashini va qaysi xatoni ushlay olmasligini bilasiz.
- Yangi route sintaksisini yozasiz:
/*splat,{/:ixtiyoriy},\\(bilan qochirish. - Express 4 dagi naqshni 5 ga o'tkaza olasiz va
PathErrorxabarini o'qiysiz. - 4 → 5 ko'chishdagi boshqa buzilishlarni (status,
redirect("back"),req.body) taniysiz.
Oldin bilishingiz kerak: Express'ga kirish va Express 5, Middleware va request lifecycle, Mashhur middleware'lar, async / await.
1. Nega bu kerak?
Internetdagi Express maqolalarining ko'pi Express 4 uchun yozilgan. Express 4 o'n yil davomida asosiy versiya bo'ldi. Express 5.0.0 esa 2024 yil sentyabrida chiqdi, npm'dagi latest belgisini 2025 yil 31 martda 5.1.0 bilan oldi (Express jamoasi blogiga ko'ra). Natijada Stack Overflow'dan olingan kod Express 5 da ikki xil buziladi:
- Ilova umuman ishga tushmaydi — eski route naqshi xato beradi.
- Ilova ishlaydi, lekin boshqacha — masalan,
res.redirect("back")endi "orqaga" emas,backdegan manzilga yo'naltiradi.
Bu ko'chish yangi uyga o'tishga o'xshaydi: mebelning ko'pi joyiga sig'adi, lekin ba'zi eshiklar torroq. Qaysi buyum sig'masligini oldindan bilsangiz, ko'chish bir kunda tugaydi. Bilmasangiz — buyum eshikda tiqilib qoladi.
Bu darsda ikki katta o'zgarishni chuqur ko'ramiz: async xatolar va route sintaksisi. Keyin qolgan mayda buzilishlar ro'yxati keladi. Barcha natijalar — haqiqiy: kanon Express 4.22.3 va 5.3.0 ni yonma-yon sinagan (t15), qolganini biz ishga tushirdik.
2. Async xatolar
2.1 Express 4 dagi muammo
Middleware darsida ko'rgansiz: ishlovchi (handler) ichida throw bo'lsa, Express xatoni 4 argumentli xato middleware'iga uzatadi. Lekin Express 4 buni faqat sinxron throw uchun qilardi. async funksiya throw qilsa, xato rad etilgan Promise ichida qoladi. Express 4 ishlovchi qaytargan qiymatga qaramaydi — Promise'ni ko'rmaydi.
Kanon bir xil kodni ikki versiyada ishga tushirgan:
app.get("/async", async () => {
throw new Error("async xato");
});
app.use((err, req, res, next) => {
res.status(500).json({ ushlandi: err.message });
});| Express 4.22.3 | Express 5.3.0 | |
|---|---|---|
GET /async |
2 s ichida javob yo'q — so'rov osilib qoldi | 500 {"ushlandi":"async xato"} |
| Jarayonda | unhandledRejection: async xato |
hech narsa |
Express 4 da mijoz javob kutib qoladi, Node esa "ushlanmagan rad etish" (unhandled rejection) haqida ogohlantiradi. Bu muammo uchun ikkita mashhur yamoq bor edi: har ishlovchini try/catch ga o'rash yoki express-async-errors paketi. Express 5 da ikkalasi ham kerak emas.
2.2 Express 5 ichida nima bo'ladi
Express 5 ning routeri ishlovchi qaytargan qiymatga qaraydi. Agar u Promise bo'lsa va rad etilsa, xato next(err) ga ketadi. Buni oddiy JS bilan modellashtiramiz — quyidagi blok haqiqiy Express emas, uning g'oyasi. «Ishga tushir» bilan sinang:
// Express 5 routerining soddalashtirilgan modeli
function chaqir(handler, next) {
try {
const natija = handler(next);
if (natija && typeof natija.then === "function") {
natija.then(undefined, (err) => next(err)); // rad etilsa
}
} catch (err) {
next(err); // sinxron throw
}
}
const xatoMw = (nom) => (err) =>
console.log(`${nom} → ushlandi: ${err.message}`);
chaqir(() => { throw new Error("sinxron"); }, xatoMw("sync"));
chaqir(async () => { throw new Error("async"); }, xatoMw("async"));
chaqir(() => Promise.reject(new Error("promise")), xatoMw("promise"));
chaqir(async (next) => {
next(new Error("next(err)"));
}, xatoMw("next"));Konsolda:
sync → ushlandi: sinxron
next → ushlandi: next(err)
async → ushlandi: async
promise → ushlandi: promiseTartibga qarang: sync va next darhol, async va promise esa keyinroq chiqdi. Promise rad etilishi microtask navbatida ishlaydi (event loop darsi). Ma'nosi bir xil — to'rttala usulda xato xato middleware'iga yetdi.
Biz buni haqiqiy Express 5.3.0 da ham sinadik: sinxron throw, await dan keyingi throw (middleware ichida ham) va rad etilgan Promise qaytarish — uchalasi 500 va xato middleware'idagi xabarni berdi.
2.3 Express 5 ham ushlay olmaydigan xato
Bitta holat qoldi — xato callback ichida, Promise zanjiridan tashqarida:
app.get("/taymer", (req, res) => {
setTimeout(() => {
throw new Error("taymer ichida xato");
}, 10);
});Biz ishga tushirdik (express 5.3.0, Node 24.21.0) — xato middleware'i chaqirilmadi, butun jarayon yiqildi:
Error: taymer ichida xato
jarayon tugadi, exit kod 1Nega? setTimeout callback'i ishlovchi tugagandan keyin, event loop'ning boshqa aylanishida ishlaydi (timers darsi). U paytda Express'ning try/catch i ham, Promise'i ham yo'q. Xato hech kimga tegishli emas — Node jarayonni to'xtatadi. Bitta foydalanuvchining so'rovi butun serverni o'chirdi.
Davosi — callback'ni Promise'ga aylantirish. node:timers/promises dagi setTimeout (timers darsi) yoki fs/promises kabi Promise API'lar:
import { setTimeout as kut } from "node:timers/promises";
app.get("/taymer", async (req, res) => {
await kut(10);
throw new Error("taymer ichida xato"); // endi Express ushlaydi
});Qoida: ishlovchi ichida callback uslubidagi API ishlatmang. Eski kutubxona faqat callback bersa — util.promisify (util darsi).
Tekshirib ko'ring: Express 5 da quyidagi ishlovchi xatoni ushlaydimi?
app.get("/x", (req, res) => { fetch(url).then(() => { throw new Error("!"); }); });
Javob
Yo'q. Ishlovchi Promise'ni qaytarmayapti — fetch(...).then(...) zanjiri yaratiladi, lekin return yo'q. Express ishlovchidan undefined oladi va Promise'ni ko'rmaydi. Xato ushlanmagan rad etish bo'ladi, mijoz esa javob kutib qoladi. Tuzatish: async + await fetch(url) yoki return fetch(url).then(...).
3. Yangi route sintaksisi (path-to-regexp 8)
3.1 Nima o'zgardi
Express route naqshlarini (masalan /vazifalar/:id) path-to-regexp kutubxonasi regex'ga aylantiradi. Express 5 da u 0.1 versiyadan 8 ga sakradi (express 5.3.0 → router 2.2.0 → path-to-regexp 8.4.2). Yangi versiya naqsh ichidagi regex imkoniyatlarini olib tashladi. Sabab — xavfsizlik: naqshdagi regex ReDoS hujumiga yo'l ochardi (RegExp tuzoqlari).
Kanon t15 natijasi — eski naqshlar Express 5 da:
| Naqsh (Express 4) | Express 5.3.0 | Yangi yozuv |
|---|---|---|
/fayl/* |
PathError: Missing parameter name at index 7 |
/fayl/*splat |
/v/:id? |
PathError: Unexpected ? at index 6 |
/v{/:id} |
/ab(cd)? |
PathError: Unexpected ( at index 3 |
ikki marshrut yoki /ab{cd} |
/:nomi.:ext |
ishlaydi | o'zgarmaydi |
Xabarni o'qishni o'rganing. Missing parameter name at index 7 — "7-pozitsiyada parametr nomi yo'q". /fayl/* da 7-belgi — *: yangi sintaksisda yulduzcha ham nomli parametr, nomi esa yozilmagan. Unexpected ? at index 6 — "6-pozitsiyada kutilmagan ?". Har xabar oxirida visit https://git.new/pathToRegexpError for info havolasi bor.
Xato ilova ishga tushganda, app.get(...) chaqirilgan joyda chiqadi — birinchi so'rovda emas. Bu yaxshi: buzuq naqsh prod'ga yashirincha chiqib ketmaydi. Xatoning turi — PathError (u TypeError dan meros oladi).
3.2 Yangi sintaksis — biz sinagan misollar
Biz express 5.3.0 da sakkizta naqshni sinadik:
GET /fayl/a/b.txt → 200 {"naqsh":"/fayl/*splat","params":{"splat":["a","b.txt"]}}
GET /fayl → 404
GET /rasm → 200 {"naqsh":"/rasm{/*yol}","params":{}}
GET /rasm/x/y.png → 200 {"naqsh":"/rasm{/*yol}","params":{"yol":["x","y.png"]}}
GET /v → 200 {"naqsh":"/v{/:id}","params":{}}
GET /v/7 → 200 {"naqsh":"/v{/:id}","params":{"id":"7"}}
GET /tolov/5(eski) → 200 {"naqsh":"/tolov/:id\\(eski\\)","params":{"id":"5"}}
GET /hisobot/2026-10 → 200 {"naqsh":"/hisobot/:yil-:oy","params":{"yil":"2026","oy":"10"}}Har qatordan bitta qoida:
*nom— wildcard, qiymati massiv./fayl/a/b.txtdasplat—["a", "b.txt"], satr emas. Express 4 dareq.params[0]—"a/b.txt"satri edi. To'liq yo'l kerak bo'lsa:req.params.splat.join("/")./*splatbo'sh yo'lga mos kelmaydi./fayl— 404. Ixtiyoriy qilish uchun qavs:/rasm{/*yol}.{ … }— ixtiyoriy qism./v{/:id}— ham/v, ham/v/7. Ixtiyoriy parametr bo'lmasa,paramsda kalit umuman yo'q (undefinedham emas).- Maxsus belgilar qochiriladi.
( ) [ ] ? + !— naqshda maxsus. Ularni oddiy belgi sifatida yozish uchun\\((JS satrida ikki teskari chiziq). -va.— ajratuvchi./:yil-:oyikki parametr beradi,/:nomi.:extham shunday.
Regex bilan cheklash endi yo'q. Biz sinadik: /a/:id(\d+) → Unexpected ( at index 6. Raqam tekshiruvini ishlovchida qiling. vazifalar-api shunday qiladi:
function idniOl(xom: string): number {
if (!/^[1-9]\d{0,9}$/.test(xom)) {
throw new HttpXato(400, "id — musbat butun son");
}
return Number(xom);
}Bu yaxshiroq ham: regex marshrutda bo'lsa, mos kelmagan so'rov jim 404 olardi. Ishlovchida esa aniq 400 va tushunarli xabar beriladi (GET /vazifalar/abc → 400 {"xato":"id — musbat butun son"}).
flowchart LR
A["/fayl/*"] --> A2["/fayl/*splat"]
B["/v/:id?"] --> B2["/v{/:id}"]
C["/:id(\\d+)"] --> C2["/:id + tekshiruv ishlovchida"]
D["/ab(cd)?"] --> D2["ikki marshrut"]Diagrammada chapda Express 4 naqshi, o'ngda Express 5 dagi o'rnini bosuvchisi. Uchinchi qatorga alohida e'tibor bering: regex naqshdan chiqib, ishlovchi ichiga ko'chdi.
Tekshirib ko'ring:
app.get("/hujjat/*yol", …)gaGET /hujjat/2026/hisobot.pdfkeldi.req.params.yolnima va/hujjatso'roviga nima bo'ladi?
Javob
req.params.yol — massiv ["2026", "hisobot.pdf"] (Express 4 dagidek "2026/hisobot.pdf" satr emas). GET /hujjat esa 404 oladi: *yol kamida bitta segment talab qiladi. Ikkalasiga ham mos kelishi uchun — /hujjat{/*yol}.
4. Boshqa buzilishlar: ro'yxat
Biz ularning har birini express 5.3.0 da ishga tushirdik:
| Express 4 kodi | Express 5 da | Nima qilish |
|---|---|---|
res.status(1000) |
RangeError: Invalid status code: 1000 |
100–999 butun son |
res.status("201") |
TypeError: … must be an integer |
res.status(201) |
res.send(404) |
status 200, tana 404 |
res.sendStatus(404) |
res.json(obj, 201) |
200, ikkinchi argument jim e'tiborsiz | res.status(201).json(obj) |
res.redirect("back") |
Location: back |
req.get("Referrer") ?? "/" |
req.param("id") |
req.param — undefined |
req.params, req.query, req.body |
app.del(...) |
undefined (kanon) |
app.delete(...) |
Uch xavfli guruh bor:
- Yiqiladigan (
status(1000),status("201"),app.del) — xato darhol ko'rinadi, ular yaxshi. - Jim o'zgaradigan (
res.send(404),res.json(obj, 201),redirect("back")) — xato yo'q, lekin javob boshqacha. Bularni testlar ushlaydi, ko'z bilan qarash emas. - Sukut o'zgargan.
express.json()ulangan, lekin tana o'qilmagan bo'lsa (masalan, Content-Type boshqa), Express 4req.bodyga bo'sh obyekt{}berardi. Express 5 esaundefinedqoldiradi (rasmiy ko'chish qo'llanmasi; 5 tomonini req obyekti darsida ko'rdik).express.json()umuman ulanmagan bo'lsa — ikkala versiyada hamundefined(kanon). Formadaexpress.urlencodedningextendedsozlamasi endifalse(Mashhur middleware'lar). So'rov parametrlari —req.query— faqat getter, unga qiymat berib bo'lmaydi; query parser sukut bo'yicha "simple" (req obyekti darsi). Endireq.hostportni ham beradi: biz127.0.0.1:54715oldik,req.hostnameesa127.0.0.1.
Express jamoasining rasmiy ko'chish qo'llanmasi bor (Manbalar bo'limida). Unda @expressjs/codemod vositasi ham tilga olingan — eski chaqiruvlarni avtomatik yangilaydi. npm'da u 0.0.5 versiyada (2026-10-24). Biz uni sinamadik.
Maslahat: Ko'chishdan oldin testlar yozing. Kanon
vazifalar-apiholat 13 da Express 5 ga o'tganda jim o'zgarishlarni aynan testlar topgan:req.body undefined, 405 yo'qligi va 416 → 500.
5. Ko'chish tartibi
- Node versiyasini tekshiring: Express 5 Node 18+ talab qiladi (
vazifalar-api— Node 24). npm i express@5va@types/express@5.- Ilovani ishga tushiring.
PathErrorbergan har naqshni yangi sintaksisga o'tkazing. grepbilan izlang:app.del,req.param(,redirect("back",res.send(ichidagi son,res.json(ikki argument bilan.try/catchyamoqlari vaexpress-async-errorsni olib tashlang.- Testlarni ishga tushiring — jim o'zgarishlar shu yerda chiqadi.
6. API qadami: async ishlovchilar (holat 17, 2-qism)
vazifalar-api boshidan Express 5 da yozilgan (holat 13), shuning uchun bu darsda kod o'zgarmaydi. Lekin loyiha Express 5 ning ikki imkoniyatiga to'liq tayanadi. Ularni ko'rib chiqing — hali commit qilmang, commit Express + TypeScript darsida.
Birinchisi — src/vazifalar/marshrut.ts da birorta try/catch yo'q:
r.route("/:id")
.get(async (req, res) => {
res.json(await xizmat.ol(idniOl(req.params.id)));
})
.delete(async (req, res) => {
await xizmat.ochir(idniOl(req.params.id));
res.sendStatus(204);
})xizmat.ol vazifa topilmasa HttpXato(404) tashlaydi. idniOl noto'g'ri ID'da sinxron HttpXato(400) tashlaydi. Ikkalasi ham xato ishlovchiga yetadi. Biz holat 17 ni ishga tushirib tekshirdik:
GET /vazifalar/999 → 404 {"xato":"Vazifa 999 topilmadi"}
GET /vazifalar/abc → 400 {"xato":"id — musbat butun son"}
DELETE /vazifalar/7 → 404 {"xato":"Vazifa 7 topilmadi"}
GET /yoq → 404 {"xato":"GET /yoq topilmadi"}Ikkinchisi — 404 middleware'i ham shunchaki throw qiladi (src/ilova.ts):
app.use((req) => {
throw new HttpXato(404, `${req.method} ${req.path} topilmadi`);
});Loyihada eski naqsh yo'q: faqat / va /:id. express-async-errors o'rnatilmagan — kanon uni ataylab qo'ymagan.
7. Ko'p uchraydigan xatolar
| Belgi | Sabab | Davosi |
|---|---|---|
PathError: Missing parameter name |
* yoki : dan keyin nom yo'q |
/*splat |
PathError: Unexpected ? |
:id? — eski ixtiyoriy |
{/:id} |
PathError: Unexpected ( |
Naqshda regex yoki guruh | Ishlovchida tekshiruv; \\( |
req.params.splat.split is not a function |
Wildcard endi massiv | .join("/") |
| So'rov osilib qoldi (Express 4) | async xato ushlanmagan | Express 5 yoki try/catch |
| Jarayon yiqildi | setTimeout/callback ichida throw |
Promise API + await |
| 201 o'rniga 200 | res.json(obj, 201) |
res.status(201).json(obj) |
8. Mashqlar
Yechimlar kurs/mashqlar/25/15-express5/ da.
1-mashq (oson): yangi naqsh
Express 4 naqshlarini Express 5 ga o'tkazing:
/fayllar/*→/fayllar/(ixtiyoriy nom, masalan*yol)/kurs/:slug?→/kurs/foydalanuvchi/:id(\d+)→/foydalanuvchi/+ tekshiruv ishlovchidaapp.del("/x", h)→app.("/x", h)
Yechim
/fayllar/*yol— qiymat massiv;/fayllarning o'zi kerak bo'lsa —/fayllar{/*yol}./kurs{/:slug}— qavs ichidagi qism ixtiyoriy./foydalanuvchi/:id— regex naqshdan chiqadi,idniOlkabi funksiya 400 beradi.delete—app.delExpress 5 da olib tashlangan.
2-mashq (o'rta): try/catch siz ishlovchi
Quyidagi Express 4 uslubidagi ishlovchini Express 5 uchun qayta yozing: try/catch va next(err) kerak emas, setTimeout callback'i Promise'ga aylansin. Xato baribir xato middleware'iga yetsin.
app.get("/kurs", (req, res, next) => {
setTimeout(() => {
try {
if (!req.query.til) throw new Error("til kerak");
res.json({ kurs: "USD", til: req.query.til });
} catch (err) {
next(err);
}
}, 50);
});Toza JS bilan tekshiring: «Express 5 ichida nima bo'ladi» bo'limidagi chaqir modelini oling, ishlovchiga soxta req/res bering. Ikki holat: til bor va yo'q. Yordam: kutish uchun new Promise((ok) => setTimeout(ok, 50)) — Promise darsi.
Yechim
const kut = (ms) => new Promise((ok) => setTimeout(ok, ms));
// Express 5 uslubi: async, try/catch yo'q
const handler = async (req, res) => {
await kut(50);
if (!req.query.til) throw new Error("til kerak");
res.json({ kurs: "USD", til: req.query.til });
};
function chaqir(h, req, res, next) {
try {
const natija = h(req, res, next);
if (natija && typeof natija.then === "function") {
natija.then(undefined, (err) => next(err));
}
} catch (err) {
next(err);
}
}
const res = { json: (x) => console.log("json:", JSON.stringify(x)) };
const next = (err) => console.log("xato mw:", err.message);
chaqir(handler, { query: { til: "uz" } }, res, next);
chaqir(handler, { query: {} }, res, next);Konsolda:
json: {"kurs":"USD","til":"uz"}
xato mw: til kerakawait kut(50) dan keyingi throw — async funksiya ichida, demak rad etilgan Promise. Model (va haqiqiy Express 5) uni next(err) ga uzatadi.
3-mashq (qiyin): ko'chish auditi
auditQil(manba) funksiyasini yozing: Express 4 kodi satrini oladi va Express 5 da muammo beradigan joylarni topadi. Kamida beshta qoida: app.del(, req.param(, redirect("back" (yoki 'back'), naqshdagi :nom?, naqshdagi yolg'iz * (nomsiz). Har topilma uchun qator raqami va maslahat qaytsin. Yordam: split("\n"), RegExp.test — RegExp darsi. Toza JS — «Ishga tushir» bilan ishlaydi.
Yechim
const QOIDALAR = [
[/\bapp\.del\(/, "app.del → app.delete"],
[/\breq\.param\(/, "req.param → req.params / query / body"],
[/redirect\(\s*["']back["']/, "redirect('back') → Referrer"],
[/["'`][^"'`]*:\w+\?/, ":id? → {/:id}"],
[/["'`][^"'`]*\/\*(?!\w)/, "/* → /*nom (massiv)"],
];
function auditQil(manba) {
const topildi = [];
manba.split("\n").forEach((qator, i) => {
for (const [naqsh, maslahat] of QOIDALAR) {
if (naqsh.test(qator)) topildi.push(`${i + 1}: ${maslahat}`);
}
});
return topildi;
}
const eski = [
'app.get("/fayl/*", yubor);',
'app.get("/kurs/:slug?", kurs);',
'app.del("/kurs/:id", ochir);',
'app.post("/kirish", (req, res) => {',
' if (!req.param("login")) return res.redirect("back");',
"});",
].join("\n");
console.log(auditQil(eski).join("\n"));Konsolda:
1: /* → /*nom (massiv)
2: :id? → {/:id}
3: app.del → app.delete
5: req.param → req.params / query / body
5: redirect('back') → ReferrerBu — oddiy matn qidiruvi. Haqiqiy loyihada eng ishonchli auditor — ilovani Express 5 da ishga tushirish (PathError darhol chiqadi) va testlar.
4-mashq: API qadami
vazifalar-api da grep -rn "try {" src/vazifalar/ bajaring — natija bo'sh bo'lishi kerak. test/api.test.ts dagi "xatolar" testiga ikki tekshiruv qo'shing: GET /vazifalar/999 → 404 va GET /vazifalar/abc → 400. npm test — yashil. Commit qilmang.
Yechim
const yoq = await fetch(`${asos}/vazifalar/999`);
assert.equal(yoq.status, 404);
assert.deepEqual(await yoq.json(), { xato: "Vazifa 999 topilmadi" });
assert.equal((await fetch(`${asos}/vazifalar/abc`)).status, 400);Kanon api.test.ts dagi "xatolar: 400 JSON, 415, 422, 405 + Allow, 404" testi 404 ni allaqachon tekshiradi — siz uni shunday kengaytirasiz. Bu test async ishlovchidagi throw Express 5 da ushlanishiga tayanadi: Express 4 da u 2 soniyadan keyin timeout bilan yiqilardi.
9. Real ishda
- Ko'chish loyihalari. Ko'p kompaniyalar hozir Express 4 dan 5 ga o'tmoqda. "Express 5 da nima o'zgardi?" — intervyu savoli bo'lib qoldi.
- Kod sharhi (code review). Ishlovchi ichidagi
setTimeout(() => { throw … })yoki qaytarilmagan Promise — butun serverni yiqitadigan xato. Sharhda shuni qidiring. - Eski maqolalar. Internetdagi kodni ko'chirishdan oldin qaysi Express versiyasi uchun yozilganini tekshiring.
Xulosa
- Express 5 async ishlovchidagi
throwva rad etilgan Promise'ni o'zinext(err)ga uzatadi; Express 4 da so'rov osilib qolardi. - Callback ichidagi
throw(masalansetTimeout) hech kim ushlamaydi — jarayon yiqiladi; Promise API vaawaitishlating. - path-to-regexp 8:
/*splat(massiv),{/:id}(ixtiyoriy), naqshda regex yo'q, maxsus belgilar\\(bilan. - Eski naqsh — ishga tushishda
PathError; jim o'zgarishlar (res.send(404),redirect("back")) — testlar bilan topiladi. express-async-errorsva har ishlovchidagitry/catch— endi ortiqcha.
Keyingi dars: Template engine'lar va server-side HTML — EJS, Pug va Handlebars bilan serverda HTML yasash va XSS'dan himoya.
Manbalar
- Express 5 ga ko'chish qo'llanmasi: https://expressjs.com/en/guide/migrating-5.html (2026-10-24)
- Express 5 xatolarni ishlash: https://expressjs.com/en/guide/error-handling.html
- Express blogi — "Express 5.1.0: Now the Default on npm" (2025-03-31): https://expressjs.com/2025/03/31/v5-1-latest-release.html; npm reestri: 5.0.0 — 2024-09-10, 5.1.0 — 2025-03-31 (2026-10-24 da tekshirildi)
- path-to-regexp 8 (README, xato havolasi
https://git.new/pathToRegexpError): https://github.com/pillarjs/path-to-regexp (express 5.3.0 → router 2.2.0^8.0.0→ 8.4.2 o'rnatiladi; npm'dagi eng yangi 9.0.0 — Express 5.3.0 ga kirmaydi, 2026-10-24) - Kanon
t15(Express 4.22.3 va 5.3.0 yonma-yon: async xato, naqshlar,app.del). Yangi naqshlar, status,redirect("back"),setTimeoutyiqilishi va holat 17 javoblari — biz ishga tushirdik (express 5.3.0, Node 24.21.0, Windows 11).
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!