पाठ 16 / 23
असिंक्रोनस एरर हैंडलिंग
असिंक्रोनस हैंडलर में फेंकी गई त्रुटियों को स्पष्ट रूप से आगे भेजना ज़रूरी है।
एक ख़तरा
Express 4 में, async route हैंडलर के अंदर रिजेक्ट हुआ promise अपने-आप एरर हैंडलर तक नहीं पहुँचता — यह चुपचाप क्रैश हो जाता है या रिक्वेस्ट अटक जाती है।
पकड़ें और आगे भेजें
बॉडी को try/catch में लपेटें और next(err) बुलाएँ — या दोहराव से बचने के लिए एक छोटा हेल्पर उपयोग करें।
const asyncHandler = (fn) => (req, res, next) =>
Promise.resolve(fn(req, res, next)).catch(next);
app.get('/users/:id', asyncHandler(async (req, res) => {
const user = await db.users.findById(req.params.id);
if (!user) {
const err = new Error('User not found');
err.status = 404;
throw err;
}
res.json(user);
}));Express 5 इसे ठीक करता है
Express 5, async हैंडलर से रिजेक्ट हुए promise को अपने-आप next(err) तक भेजता है — Express 5 पर wrapper की ज़रूरत नहीं रहती।