Mundarija (33)
- Bu darsda
- 1. Nega bu kerak?
- 2. Xato xabarining anatomiyasi
- 2.1 Birinchi xatomizni yasaymiz
- 2.2 Qismlarga ajratamiz
- 2.3 fayl:qator:ustun manzili
- 2.4 O'zingiz to'ldiring
- 3. JavaScript xato turlari
- 3.1 SyntaxError — til qoidasi buzilgan
- 3.2 ReferenceError — bunday nom yo'q
- 3.3 TypeError — narsa bor, lekin noto'g'ri ishlatilgan
- 3.4 RangeError — qiymat ruxsat etilgan oraliqdan tashqarida
- 3.5 Xulosa jadvali
- 4. Xato ko'rsatilgan qator va xato qilingan qator
- 5. Stack trace: xatogacha bo'lgan yo'l
- 5.1 Chaqiruvlar zanjiri
- 5.2 Misol
- 5.3 Qanday o'qiladi
- 5.4 O'z faylingizni toping
- 6. Warning va Error
- 7. Birinchi xatodan boshlang
- 7.1 Xatoni o'qishning 5 qadami
- 8. Ko'p uchraydigan xatolar
- 8.1 Xabarni o'qimasdan kodni o'zgartirish
- 8.2 Paket ichidagi faylni "tuzatish"
- 8.3 Faqat oxirgi qatorga qarash
- 8.4 Katta-kichik harfni e'tiborsiz qoldirish
- 9. Mashqlar
- 1-mashq (oson)
- 2-mashq (o'rta)
- 3-mashq (qiyin)
- 10. Real ishda
- Xulosa
Xato xabarini o'qish: xato turi, fayl:qator:ustun va stack trace
Qisqacha: Xato xabari — dushman emas, xarita. Unda to'rt narsa bor: xato turi (
TypeError), nima bo'lgani (console.lg is not a function), manzil (t.js:2:9— fayl, qator, ustun) va stack trace — xatogacha bo'lgan chaqiruvlar zanjiri. Har doim birinchi xatodan va o'z faylingiz ko'rsatilgan qatordan boshlang. Warning dasturni to'xtatmaydi, error — to'xtatadi.
Bu darsda
- Node.js xato xabarining har bir qismini nomlab bera olasiz.
fayl:qator:ustunmanzili bo'yicha xatoli joyni bir zumda topasiz.SyntaxError,ReferenceError,TypeErrorvaRangeErrorni farqlaysiz.- Stack trace'ni o'qib, o'zingizning kodingiz qayerda ekanini topasiz.
- Warning va error farqini, "birinchi xatodan boshla" qoidasini tushuntira olasiz.
Oldin bilishingiz kerak: Dasturchi ingliz tili, Exit code va buyruqlarni zanjirlash, Node.js nima va uni o'rnatish.
1. Nega bu kerak?
Malika birinchi marta terminalda 12 qator qizil matn ko'rdi. Yuragi urib ketdi: "Kompyuterni buzib qo'ydim". U terminalni yopdi va kodni boshidan yozdi. Xato yana chiqdi.
Aslida o'sha 12 qatorning birinchisida aniq yozilgan edi: qaysi fayl, qaysi qator, nima noto'g'ri. Malika uni o'qimagan edi, xolos.
Xato chiqishi — dasturlashning oddiy qismi. Tajribali dasturchilar ham har kuni o'nlab xato ko'radi. Ular yangi boshlovchidan xato qilmasligi bilan emas, xabarni tez o'qishi bilan farq qiladi.
O'xshatish: navigator (GPS). U "200 metrdan keyin o'ngga buriling" deydi — aniq manzil va aniq harakat. Xato xabari ham shunday: "mana bu faylning 2-qatoriga bor, u yerda mana shu narsa noto'g'ri". Faqat uning tilini bilish kerak.
2. Xato xabarining anatomiyasi
2.1 Birinchi xatomizni yasaymiz
t.js nomli fayl yarating. Ichiga uch qator yozing — ikkinchi qatorda ataylab xato bor, log o'rniga lg:
console.log("Boshlandi");
console.lg("Salom");
console.log("Tugadi");Terminalda ishga tushiring:
node t.jsTerminalda:
Boshlandi
C:\Users\Malika\loyiha\t.js:2
console.lg("Salom");
^
TypeError: console.lg is not a function
at Object.<anonymous> (C:\Users\Malika\loyiha\t.js:2:9)
at Module._compile (node:internal/modules/cjs/loader:...)
... yana 7 ta shunga o'xshash qator ...
Node.js v24.21.0Ikki narsaga e'tibor bering. Birinchisi — Boshlandi chiqdi: 1-qator bajarildi. Ikkinchisi — Tugadi chiqmadi: xato dasturni to'xtatdi, 3-qatorga navbat kelmadi.
2.2 Qismlarga ajratamiz
| Qism | Misolda | Ma'nosi |
|---|---|---|
| Manzil sarlavhasi | ...\t.js:2 |
Qaysi fayl, qaysi qator |
| Kod qatori | console.lg("Salom"); |
Xato bo'lgan qatorning o'zi |
^ belgisi |
lg tagida |
Qator ichida aynan qayer |
| Xato turi | TypeError |
Xatoning "toifasi" |
| Xato matni | console.lg is not a function |
Nima bo'lgani |
| Stack trace | at ... qatorlari |
Xatogacha bo'lgan yo'l |
| Versiya | Node.js v24.21.0 |
Qaysi Node.js'da ishlagan |
Eng muhim qator — xato turi va matni: TypeError: console.lg is not a function. Tarjimasi: "tur xatosi: console.lg — funksiya emas". Ingliz tili darsidagi 1-qolip: X is not Y.
Funksiya — nom bilan chaqirib ishlatiladigan tayyor kod bo'lagi. console.log shunday funksiya. Uni 08-qismda to'liq o'rganamiz. Hozir muhimi: console ichida lg degan funksiya yo'q.
2.3 fayl:qator:ustun manzili
Stack trace'ning birinchi qatorida: t.js:2:9. Uni shunday o'qiymiz:
t.js— fayl nomi.2— qator raqami.9— ustun, ya'ni qator boshidan nechanchi belgi.console.— 8 ta belgi, 9-belgi —lgninglharfi.
VS Code ichki terminalida bu manzil ustiga Ctrl bosib turib sichqoncha bilan bossangiz (macOS'da Cmd), fayl aynan shu qator va ustunda ochiladi. Faylda qatorga o'tishning yana bir yo'li — Ctrl + G va qator raqami.
2.4 O'zingiz to'ldiring
Xabar: ReferenceError: narx is not defined va manzil hisob.js:14:3.
- Xato turi:
- Fayl:
- Qator:
- Ustun:
Tekshirib ko'ring: Nega
t.jsmisolidaTugadiso'zi ekranga chiqmadi?
Javob
Chunki 2-qatordagi xato dasturni to'xtatdi. Node.js kodni yuqoridan pastga bajaradi: 1-qator bajarildi (Boshlandi), 2-qatorda xato chiqdi va dastur shu yerda tugadi. 3-qatorga navbat kelmadi. Buni exit code darsidagi kabi tekshirsangiz, echo $? natijasi 1 bo'ladi — muvaffaqiyatsiz tugagan.
3. JavaScript xato turlari
JavaScript'da xato turi — xatoning "familiyasi". U muammoni qayerdan qidirishni aytadi. Kodlarni hozir to'liq tushunishingiz shart emas — faqat xabarlarni o'qishni mashq qilamiz.
3.1 SyntaxError — til qoidasi buzilgan
Sintaksis (syntax) — tilning yozish qoidalari: qavslar, qo'shtirnoqlar, vergullar qayerda turishi. Qoida buzilsa, Node.js kodni umuman tushunmaydi.
console.log("Boshlandi");
console.log("Salom"
console.log("Tugadi");Terminalda:
C:\Users\Malika\loyiha\s.js:2
console.log("Salom"
^^^^^^^
SyntaxError: missing ) after argument listTarjima: "argumentlar ro'yxatidan keyin ) yetishmayapti". Argument — qavs ichiga beriladigan qiymat, bu yerda "Salom".
E'tibor bering: Boshlandi ham chiqmadi. TypeError da 1-qator bajarilgan edi, bu yerda esa yo'q. Nega? Node.js ishga tushirishdan oldin butun faylni "o'qib chiqadi". Grammatik xato topsa — birorta ham qatorni bajarmaydi. Xuddi pochta xodimi manzili o'qib bo'lmaydigan xatni yo'lga chiqarmay, darhol qaytarib bergani kabi.
3.2 ReferenceError — bunday nom yo'q
consol.log("Salom");ReferenceError: consol is not definedNode.js consol degan nomni hech qayerda topmadi. Sabab ko'pincha — nom xato yozilgan yoki hali e'lon qilinmagan.
3.3 TypeError — narsa bor, lekin noto'g'ri ishlatilgan
2-bo'limdagi console.lg misoli. console mavjud, lekin undan mavjud bo'lmagan narsani funksiya sifatida chaqirdik. Tur (type) — qiymatning xili: son, matn, funksiya. TypeError — "bu qiymat bilan bunday ish qilib bo'lmaydi".
3.4 RangeError — qiymat ruxsat etilgan oraliqdan tashqarida
console.log("ab".repeat(-1));RangeError: Invalid count value: -1repeat matnni necha marta takrorlashni so'raydi. −1 marta takrorlab bo'lmaydi — "noto'g'ri son qiymati: −1".
3.5 Xulosa jadvali
| Tur | Qisqa ma'nosi | Birinchi nimani tekshirish |
|---|---|---|
SyntaxError |
Yozish qoidasi buzilgan | Qavs, qo'shtirnoq, vergul — shu va oldingi qatorda |
ReferenceError |
Bunday nom yo'q | Nomning imlosi, katta-kichik harf |
TypeError |
Qiymat noto'g'ri ishlatilgan | Nima ishlatilayotgani va u haqiqatan bormi |
RangeError |
Qiymat chegaradan tashqarida | Berilgan son yoki uzunlik |
Maslahat: Xato faqat JavaScript'da emas. Terminal ham, npm ham o'z xato xabarlarini beradi:
bash: nod: command not found(buyruq topilmadi),npm error code ENOENT(fayl yo'q). O'qish usuli bir xil: tur yoki kod, matn, manzil.
Tekshirib ko'ring: Faylingizda 20 qator bor, 15-qatorda qavs yopilmagan. Ishga tushirganingizda 1–14-qatorlar bajariladimi?
Javob
Yo'q. Bu SyntaxError — Node.js faylni bajarishdan oldin butunligicha tekshiradi. Grammatik xato topilsa, birorta qator ham bajarilmaydi. TypeError va ReferenceError esa bajarilish paytida chiqadi — ulardan oldingi qatorlar ishlab ulguradi.
4. Xato ko'rsatilgan qator va xato qilingan qator
Ba'zan Node.js xatoni keyingi qatorda ko'rsatadi, holbuki xato oldingisida qilingan.
console.log("Salom",
console.log("Xayr");C:\Users\Malika\loyiha\q.js:2
console.log("Xayr");
^
SyntaxError: missing ) after argument listXabar 2-qatorni ko'rsatyapti. Lekin 2-qator to'g'ri! Xato 1-qatorda: ) o'rniga vergul qo'yilgan.
Nega shunday? Node.js 1-qatorni o'qiyotib vergulni ko'rdi va "yana qiymat keladi" deb kutdi. 2-qatorga o'tdi, u yerda ham ) topmadi. Qavs yetishmasligini "sezgan" joyi — 2-qator. Shuning uchun u o'sha joyni ko'rsatdi.
Qoida: SyntaxError ko'rsatgan qator to'g'ri ko'rinsa — oldingi qatorni tekshiring. Xato ko'pincha "bir qadam orqada" bo'ladi.
Tekshirib ko'ring: Xabar
SyntaxErrorva 31-qatorni ko'rsatyapti. 31-qatorda hammasi joyida. Keyingi qadamingiz?
Javob
30-qatorni (va kerak bo'lsa undan oldingilarini) tekshirish. Ochilgan, lekin yopilmagan qavs yoki qo'shtirnoq ko'pincha oldingi qatorda qoladi. Node.js xatoni u "sezilgan" joyda ko'rsatadi, qilingan joyda emas.
5. Stack trace: xatogacha bo'lgan yo'l
5.1 Chaqiruvlar zanjiri
Katta dasturda kod bir joydan boshqa joyga "sakrab" bajariladi. Bir kod bo'lagi ikkinchisini chaqiradi, u uchinchisini. Stack trace (chaqiruvlar izi) — xato paytida shu zanjirning ro'yxati.
O'xshatish: navbatchilik zanjiri. Direktor o'rinbosarga topshiriq berdi, o'rinbosar — hisobchiga. Hisobchi xato qildi. "Kim kimga topshiriq bergan" ro'yxati — stack trace. Xato hisobchida, lekin ro'yxat butun yo'lni ko'rsatadi.
5.2 Misol
dokon.js faylida ikkita funksiya bor. Kodni o'qib tushunish shart emas — biz faqat xabarni o'qiymiz:
function narxniHisobla() {
return chegirma * 2;
}
function chekniChiqar() {
console.log(narxniHisobla());
}
chekniChiqar();Terminalda:
C:\Users\Malika\loyiha\dokon.js:2
return chegirma * 2;
^
ReferenceError: chegirma is not defined
at narxniHisobla (C:\...\dokon.js:2:3)
at chekniChiqar (C:\...\dokon.js:5:15)
at Object.<anonymous> (C:\...\dokon.js:7:1)
at Module._compile (node:internal/...)
... yana bir nechta node:internal qatorlari ...(C:\... — qisqartirildi, aslida to'liq yo'l bo'ladi.)
5.3 Qanday o'qiladi
Stack trace tepadan pastga o'qiladi va har qator "bir qadam orqaga" qaytadi:
at narxniHisobla (...dokon.js:2:3)— xato aynan shu yerda chiqdi: 2-qator.at chekniChiqar (...dokon.js:5:15)—narxniHisoblani 5-qatordan kim chaqirgan.at Object.<anonymous> (...dokon.js:7:1)—chekniChiqarni 7-qatordan faylning o'zi chaqirgan.Object.<anonymous>— "faylning asosiy qismi, nomsiz".node:internal/...— Node.js'ning ichki fayllari. Ular sizga kerak emas.
Bajarilish tartibi esa teskari — pastdan tepaga:
flowchart TD
A["7-qator: chekniChiqar chaqirildi"] --> B["5-qator: narxniHisobla chaqirildi"]
B --> C["2-qator: chegirma topilmadi"]
C --> X[ReferenceError]5.4 O'z faylingizni toping
Real loyihada stack trace'da 20–30 qator bo'lishi mumkin. Ularning ko'pi — begona kod:
node:internal/...— Node.js'ning o'zi.node_modules/...— npm orqali o'rnatilgan paketlar (npm darsidan).
Qoida: tepadan pastga qarab, sizning faylingiz (masalan src/... yoki loyiha papkangizdagi fayl) uchragan birinchi qatorni toping. Xatoni o'sha yerdan izlang. Muammo 99% holatda sizning kodingizda, paket ichida emas.
Tekshirib ko'ring: Stack trace'da tartib bilan uch qator bor:
node_modules/express/lib/router.js:45,src/buyurtma.js:18:9,node:internal/process:12. Qaysi faylni birinchi ochasiz?
Javob
src/buyurtma.js, 18-qator, 9-ustun. node_modules — o'rnatilgan paket, node:internal — Node.js'ning ichki kodi. Ularni tuzatish kerak emas. Ehtimol, sizning 18-qatoringiz paketga noto'g'ri qiymat bergan.
6. Warning va Error
Terminalda har doim ham qizil xato chiqmaydi. Ba'zan ogohlantirish (warning) chiqadi.
| Error (xato) | Warning (ogohlantirish) | |
|---|---|---|
| Dastur | To'xtaydi | Ishlashda davom etadi |
| Exit code | 0 emas (odatda 1) |
0 bo'lishi mumkin |
| Nima qilish kerak | Tuzatish shart | O'qish, rejalashtirib tuzatish |
Misol — Node.js'ning eskirgan imkoniyat haqidagi ogohlantirishi:
davom etdi
(node:5800) [DEP0005] DeprecationWarning: Buffer() is
deprecated due to security and usability issues. ...davom etdi yozuvi chiqdi — dastur to'xtamadi. DEP0005 — ogohlantirish kodi, uni qidiruvga berish qulay.
npm ham paket o'rnatganda npm warn deprecated ... qatorlarini chiqarishi mumkin. Bu "paketlardan biri eskirgan" degani, o'rnatish esa muvaffaqiyatli tugaydi.
Diqqat: Warning'ni "qizil emas-ku" deb butunlay e'tiborsiz qoldirmang. Bugungi
deprecatedogohlantirishi — ertangi versiyadagi xato. Uni yozib qo'ying va vaqt topib tuzating.
7. Birinchi xatodan boshlang
Ba'zan ekran xatolarga to'lib ketadi. Masalan, keyinroq o'rganadigan vositalar bitta fayldagi bitta xato uchun o'nta xabar chiqarishi mumkin. Chunki birinchi xato keyingi hamma narsani "zanjir bo'lib" buzadi.
O'xshatish: domino. Birinchi tosh yiqilsa, qolganlari ham yiqiladi. Oxirgi toshni turg'izish befoyda — birinchisini tuzatish kerak.
Qoida: xabarlar ro'yxatida eng birinchi xatoni topib tuzating va qayta ishga tushiring. Ko'pincha qolganlari o'z-o'zidan yo'qoladi.
7.1 Xatoni o'qishning 5 qadami
- To'xtang va to'liq o'qing. Terminalni yopmang, kodni tasodifan o'zgartirmang.
- Tur va matnni toping.
TypeError: ...qatorini tarjima qiling (ingliz tili darsidagi qoliplar). - Manzilni toping. Stack trace'da sizning faylingiz uchragan birinchi
fayl:qator:ustun. - O'sha qatorni va oldingisini tekshiring. Ayniqsa
SyntaxErrorda. - Tushunmasangiz — qidiring. Umumiy qismni qo'shtirnoqda (qidirish darsi).
8. Ko'p uchraydigan xatolar
8.1 Xabarni o'qimasdan kodni o'zgartirish
Qizil matnni ko'rib, taxminan bir nechta joyni o'zgartirish. Endi bitta emas, uchta xato bor.
Avval 7.1 dagi 5 qadam. Xabar qaysi qatorni aytsa — o'sha yerdan boshlang.
8.2 Paket ichidagi faylni "tuzatish"
Stack trace'dagi node_modules/express/lib/... faylini ochib, uni o'zgartirish. Keyingi npm install da o'zgarishingiz o'chib ketadi, xato esa qoladi.
Stack trace'dan o'z faylingizni toping. Paket odatda sizning kodingiz bergan noto'g'ri qiymat tufayli yiqiladi.
8.3 Faqat oxirgi qatorga qarash
Uzun chiqishning eng pastini o'qish (Node.js v24.21.0 yoki npm error A complete log of this run...) va "tushunarsiz" deb xulosa qilish.
Tepada — xato turi va matni, stack trace'ning boshida — manzil. Asosiy ma'lumot yuqorida.
8.4 Katta-kichik harfni e'tiborsiz qoldirish
ReferenceError: Console is not defined ni ko'rib, "men console yozdim-ku" deyish.
JavaScript katta va kichik harfni farqlaydi: Console va console — ikki xil nom. Xabardagi nomni harfma-harf solishtiring.
9. Mashqlar
1-mashq (oson)
Xabarni o'qing va to'rt savolga javob bering: fayl, qator, xato turi, taxminiy sabab.
C:\Users\Ali\sayt\server.js:45
});
^
SyntaxError: Unexpected token '}'Ishora: 2.2 jadval va 3.1 bo'lim; Unexpected token — "kutilmagan belgi".
Yechim
- Fayl:
server.js. - Qator: 45.
- Tur:
SyntaxError— yozish qoidasi buzilgan. - Sabab: 45-qatordagi
}(jingalak qavs) kutilmagan joyda turibdi. Ehtimol, qavslar juftligi buzilgan — qayerdadir ortiqcha}bor yoki{yetishmayapti. 4-bo'lim qoidasi bo'yicha 44-qator va undan oldingilarni ham tekshirish kerak.
2-mashq (o'rta)
Jasurning dasturi Boshlandi deb yozdi, keyin shu xatoni berdi:
TypeError: console.logg is not a function
at Object.<anonymous> (C:\...\app.js:3:9)Uch savol: 1) xato qaysi qatorda; 2) nega Boshlandi chiqdi; 3) qanday tuzatiladi.
Ishora: 2.3 bo'lim (manzil) va 3.1 bo'limdagi TypeError bilan SyntaxError farqi.
Yechim
app.jsning 3-qatori, 9-ustun.- Bu
TypeError— bajarilish paytidagi xato. 3-qatorgacha bo'lgan qatorlar bajarilib ulgurgan.SyntaxErrorbo'lganda esa hech narsa chiqmas edi. console.loggniconsole.logga to'g'rilash kerak — bitta ortiqchagharfi.
3-mashq (qiyin)
Quyidagi stack trace berilgan. Xato qaysi funksiyada chiqqanini, uni kim chaqirganini va qaysi faylni birinchi ochish kerakligini yozing. Qaysi qatorlarni o'tkazib yuborish mumkinligini ham ayting.
TypeError: Cannot read properties of undefined (reading 'toFixed')
at formatPrice (node_modules/narx-kit/index.js:18:9)
at chekniChiqar (src/chek.js:22:15)
at buyurtmaniYopish (src/buyurtma.js:40:3)
at node:internal/process/task_queues:105:5Ishora: 5.3 (tepadan pastga o'qish) va 5.4 (o'z faylingizni topish).
Yechim
- Xato
formatPricefunksiyasida chiqdi — unarx-kitpaketi ichida (node_modules). - Uni
src/chek.jsning 22-qatoridagichekniChiqarchaqirgan. Uni esasrc/buyurtma.jsning 40-qatori chaqirgan. - Birinchi ochiladigan fayl:
src/chek.js, 22-qator. Bu stack trace'da uchragan birinchi sizning faylingiz. Ehtimol, u paketga bo'sh qiymat (undefined— "qiymat yo'q") uzatgan. - O'tkazib yuboriladi:
node_modules/...(paketning ichi) vanode:internal/...(Node.js'ning ichi).
Xabar tarjimasi: "undefined ning xususiyatlarini o'qib bo'lmaydi" — ya'ni qiymati yo'q narsadan nimadir olishga urinilgan. Bu xatoni JavaScript qismida ko'p uchratasiz.
10. Real ishda
- Har kuni. Dasturchi vaqtining katta qismi xatoni topish va tuzatishga ketadi. Xabarni tez o'qish — eng ko'p vaqt tejaydigan ko'nikma.
- Serverda. Sayt ishlayotganda chiqqan xatolar maxsus xizmatlarga yig'iladi — ular ham xuddi shu tur, matn va stack trace'ni ko'rsatadi. Buni monitoring qismida o'rganamiz.
- Brauzerda. DevTools konsolidagi qizil xabarlar ham shu tuzilishda: tur, matn,
fayl:qator. Ularni DevTools darsida ko'rgan edingiz. - Chuqurroq. Kodni qatorma-qator to'xtatib ko'rish — debugger — JavaScript qismida o'rganiladi.
- Intervyu. "Xato chiqsa, nima qilasiz?" — "xabarni o'qiyman: tur, matn, manzil; stack trace'dan o'z faylimni topaman; kerak bo'lsa qidiraman".
Xulosa
- Xato xabari to'rt qismdan iborat: tur, matn,
fayl:qator:ustunmanzili va stack trace. SyntaxError— qoida buzilgan, hech narsa bajarilmaydi;ReferenceError— nom yo'q;TypeError— noto'g'ri ishlatish;RangeError— chegaradan tashqari qiymat.SyntaxErrorko'rsatgan qator to'g'ri bo'lsa — oldingi qatorni tekshiring.- Stack trace tepadan pastga o'qiladi;
node_modulesvanode:internalo'tkaziladi, birinchi o'z faylingiz topiladi. - Error dasturni to'xtatadi, warning — yo'q, lekin uni ham e'tiborsiz qoldirmang.
- Har doim birinchi xatodan boshlang.
Keyingi dars: Yordam so'rash va kod ulashish — xatoni o'zingiz yecha olmasangiz, uni boshqalarga qanday tushunarli qilib yetkazish va kodni to'g'ri ulashishni o'rganamiz.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!