I am getting following error in my Node-Express App
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 4)
To say the least, I have created a helper function which looks something like this
const getEmails = (userID, targettedEndpoint, headerAccessToken) => { return axios.get(base_url + userID + targettedEndpoint, { headers: {"Authorization" : `Bearer ${headerAccessToken}`} }) .catch(error => { throw error}) }
and then I am importing this helper function
const gmaiLHelper = require("./../helper/gmail_helper")
and calling it inside my api route like this
router.get("/emailfetch", authCheck, async (req, res) => { //listing messages in users mailbox let emailFetch = await gmaiLHelper.getEmails(req.user._doc.profile_id , '/messages', req.user.accessToken) .catch(error => { throw error}) emailFetch = emailFetch.data res.send(emailFetch) })
From my end, I think I am handling the error by using catch block.
Question: Can someone explain me why I am getting the error and how can I fix it?
Advertisement
Answer
.catch(error => { throw error})
is a no-op. It results in unhandled rejection in route handler.
As explained in this answer, Express doesn’t support promises, all rejections should be handled manually:
router.get("/emailfetch", authCheck, async (req, res, next) => { try { //listing messages in users mailbox let emailFetch = await gmaiLHelper.getEmails(req.user._doc.profile_id , '/messages', req.user.accessToken) emailFetch = emailFetch.data res.send(emailFetch) } catch (err) { next(err); } })