একটি GET রিকোয়েস্টের ডেটা সম্পূর্ণভাবে URL-এ থাকে — রুট প্যারামিটার আর কোয়েরি স্ট্রিং, দুটোই ইতিমধ্যে কভার করা হয়েছে। একটি POST রিকোয়েস্ট সাধারণত এর বডি-তে ডেটা বহন করে, যা পড়তে নিজস্ব একটি ধাপ প্রয়োজন।
Middleware পাঠের express.json(), একটি JSON রিকোয়েস্ট বডি পড়ে আর সেটি req.body-তে পার্স করে:
app.use(express.json())
app.post('/products', (req, res) => {
console.log(req.body) // { name: 'Laptop Stand', price: 25 }
res.status(201).send(`Created: ${req.body.name}`)
})express.json() রেজিস্টার না করলে, req.body শুধু undefined হয় — টেস্ট করার সময় একটি POST রুট "কোনো ডেটা পাচ্ছে না" হওয়ার এটিই সবচেয়ে সাধারণ কারণ।
একটি সাধারণ HTML <form> ডিফল্টভাবে JSON পাঠায় না — এটি এর বদলে application/x-www-form-urlencoded ডেটা পাঠায়, যার জন্য একটি ভিন্ন middleware প্রয়োজন:
<form method="POST" action="/contact">
<input name="email" type="email">
<textarea name="message"></textarea>
<button type="submit">Send</button>
</form>app.use(express.urlencoded({ extended: true }))
app.post('/contact', (req, res) => {
console.log(req.body) // { email: '...', message: '...' }
res.send('Thanks for your message')
})express.json() আর express.urlencoded() দুটোই একসাথে রেজিস্টার করা স্বাভাবিক — প্রতিটি শুধু সেই রিকোয়েস্টের জন্য সক্রিয় হয় যার Content-Type হেডার এটি যা সামলায় তার সাথে মেলে, তাই এগুলো দ্বন্দ্বে যায় না।
res.json() রেসপন্স-পাশের সমতুল্য — এটি সঠিক Content-Type সেট করে আর একটি JavaScript অবজেক্টকে স্বয়ংক্রিয়ভাবে একটি JSON স্ট্রিং-এ রূপান্তর করে:
app.get('/products/:id', (req, res) => {
res.json({ id: req.params.id, name: 'Laptop Stand', price: 25 })
})res.send() প্রযুক্তিগতভাবে JSON-এর জন্যও কাজ করে, কিন্তু res.json() উদ্দেশ্য সম্পর্কে বেশি স্পষ্ট আর কয়েকটি edge case (যেমন null পাঠানো) বেশি অনুমানযোগ্যভাবে সামলায়। রেসপন্সটি টেক্সট বা HTML-এর বদলে ডেটা হওয়ার উদ্দেশ্যে হলেই res.json() ব্যবহার করুন।