console.log() কোর্সে এখন পর্যন্ত আপনাকে এগিয়ে নিয়ে এসেছে, আর এটি একটি বৈধ টুল — শুধু একজন শিক্ষানবিসের ভরসা নয়। এই পাঠ আরও কয়েকটি যোগ করে, যেসব পরিস্থিতিতে console.log() কল ছড়িয়ে দেওয়া আর যথেষ্ট হয় না।
Node একটি ধরা-না-পড়া error-এ ক্র্যাশ করলে, এটি একটি stack trace প্রিন্ট করে — এড়িয়ে যাওয়ার মতো শব্দ নয়, বরং জিনিসগুলো ঠিক কোথায় ভুল হয়েছে তার একটি মানচিত্র:
TypeError: Cannot read properties of undefined (reading 'name')
at getProductName (/app/products.js:12:20)
at /app/app.js:8:15এটি উপর থেকে নিচে পড়ুন: প্রথমে error টাইপ আর মেসেজ, তারপর এটি ঠিক যে ফাইল আর লাইনে ঘটেছে, তারপর সেখানে নিয়ে যাওয়া প্রতিটি ফাংশন কল। products.js:12:20 মানে লাইন 12, ক্যারেক্টার 20 — এটিই প্রথমে দেখার জায়গা, ট্রেসের শেষ লাইন নয়।
Node একটি বাস্তব debugger নিয়ে আসে — কোনো অতিরিক্ত প্যাকেজের প্রয়োজন নেই। --inspect দিয়ে একটি স্ক্রিপ্ট চালান:
node --inspect app.jsতারপর Chrome খুলুন আর chrome://inspect-এ যান — এটি চলমান Node প্রসেসের সাথে সংযুক্ত হয়, আর আপনাকে বাস্তব breakpoint, লাইন বাই লাইন কোডের মধ্য দিয়ে যাওয়ার ক্ষমতা, আর প্রতিটি পয়েন্টে ভেরিয়েবল পরীক্ষা করার সুযোগ দেয়, ঠিক সেই একই DevTools-এ যা আপনি একটি ওয়েবপেজ ডিবাগ করতে ইতিমধ্যে ব্যবহার করেছেন।
একটি debugger সংযুক্ত থাকলে, debugger কীওয়ার্ড ঠিক সেখানে এক্সিকিউশন বিরতি দেয়:
function calculateTotal(items) {
debugger // --inspect দিয়ে চালানোর সময় এক্সিকিউশন এখানে বিরতি নেয়
return items.reduce((sum, item) => sum + item.price, 0)
}| লক্ষণ | সম্ভাব্য কারণ |
|---|---|
req.body হলো undefined | express.json() (অথবা urlencoded()) রেজিস্টার করা নেই |
| একটি রিকোয়েস্ট শুধু চিরকাল ঝুলে থাকে | একটি middleware ফাংশন কখনো next() কল করেনি, অথবা একটি রুট হ্যান্ডলার কখনো res.end()/res.send() কল করেনি |
| "Cannot find module" | একটি require() পাথে একটি টাইপো, অথবা প্যাকেজটি আসলেই ইনস্টল করা নেই — node_modules চেক করুন |
| একটি খারাপ রিকোয়েস্ট থেকে পুরো সার্ভার ক্র্যাশ হয়েছে | একটি রুট হ্যান্ডলারের ভেতরের একটি error try/catch-এ মোড়ানো ছিল না — error-হ্যান্ডলিং পাঠ দেখুন |
একটি বাগ স্পষ্ট না হলে, debugger-এর দিকে যাওয়ার আগে এটি সংকুচিত করুন: error অদৃশ্য না হওয়া পর্যন্ত কোড কমেন্ট আউট করুন, তারপর একে একে এটি ফিরিয়ে আনুন। এটি অন্তর্দৃষ্টির চেয়ে ধীর কিন্তু এটি সবসময় আসল লাইনটি খুঁজে পায়, আর এটি এমন বাগেও কাজ করে যা কোডের দিকে যতই তাকান না কেন সমাধান হয় না।