IlmHamroh
JavaScript Full-stack/3-qism. Dasturchi asboblari va fikrlash19/21-dars13 daqiqa
Mundarija (33)

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:ustun manzili bo'yicha xatoli joyni bir zumda topasiz.
  • SyntaxError, ReferenceError, TypeError va RangeError ni 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:

js
console.log("Boshlandi");
console.lg("Salom");
console.log("Tugadi");

Terminalda ishga tushiring:

bash
node t.js

Terminalda:

text
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.0

Ikki 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 — lg ning l harfi.

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.js misolida Tugadi so'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.

js
console.log("Boshlandi");
console.log("Salom"
console.log("Tugadi");

Terminalda:

text
C:\Users\Malika\loyiha\s.js:2
console.log("Salom"
            ^^^^^^^

SyntaxError: missing ) after argument list

Tarjima: "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

js
consol.log("Salom");
text
ReferenceError: consol is not defined

Node.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

js
console.log("ab".repeat(-1));
text
RangeError: Invalid count value: -1

repeat 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.

js
console.log("Salom",
console.log("Xayr");
text
C:\Users\Malika\loyiha\q.js:2
console.log("Xayr");
                  ^

SyntaxError: missing ) after argument list

Xabar 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 SyntaxError va 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:

js
function narxniHisobla() {
  return chegirma * 2;
}
function chekniChiqar() {
  console.log(narxniHisobla());
}
chekniChiqar();

Terminalda:

text
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:

  1. at narxniHisobla (...dokon.js:2:3) — xato aynan shu yerda chiqdi: 2-qator.
  2. at chekniChiqar (...dokon.js:5:15) — narxniHisobla ni 5-qatordan kim chaqirgan.
  3. at Object.<anonymous> (...dokon.js:7:1) — chekniChiqar ni 7-qatordan faylning o'zi chaqirgan. Object.<anonymous> — "faylning asosiy qismi, nomsiz".
  4. 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:

text
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 deprecated ogohlantirishi — 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

  1. To'xtang va to'liq o'qing. Terminalni yopmang, kodni tasodifan o'zgartirmang.
  2. Tur va matnni toping. TypeError: ... qatorini tarjima qiling (ingliz tili darsidagi qoliplar).
  3. Manzilni toping. Stack trace'da sizning faylingiz uchragan birinchi fayl:qator:ustun.
  4. O'sha qatorni va oldingisini tekshiring. Ayniqsa SyntaxError da.
  5. 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.

text
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:

text
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
  1. app.js ning 3-qatori, 9-ustun.
  2. Bu TypeError — bajarilish paytidagi xato. 3-qatorgacha bo'lgan qatorlar bajarilib ulgurgan. SyntaxError bo'lganda esa hech narsa chiqmas edi.
  3. console.logg ni console.log ga to'g'rilash kerak — bitta ortiqcha g harfi.

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.

text
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:5

Ishora: 5.3 (tepadan pastga o'qish) va 5.4 (o'z faylingizni topish).

Yechim
  • Xato formatPrice funksiyasida chiqdi — u narx-kit paketi ichida (node_modules).
  • Uni src/chek.js ning 22-qatoridagi chekniChiqar chaqirgan. Uni esa src/buyurtma.js ning 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) va node: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:ustun manzili va stack trace.
  • SyntaxError — qoida buzilgan, hech narsa bajarilmaydi; ReferenceError — nom yo'q; TypeError — noto'g'ri ishlatish; RangeError — chegaradan tashqari qiymat.
  • SyntaxError ko'rsatgan qator to'g'ri bo'lsa — oldingi qatorni tekshiring.
  • Stack trace tepadan pastga o'qiladi; node_modules va node:internal o'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.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Xato xabarini o'qish: xato turi, fayl:qator:ustun va stack trace — IlmHamroh