Is this good use of try…catch, or should I write everything in try block? I am trying to prevent nested try…catch blocks.
router.post('/refresh', async (req, res) => {
const refreshToken = req.body.token;
let decoded;
try {
decoded = jwt.verify(
refreshToken,
process.env.REFRESH_TOKEN_SECRET,
);
} catch(error) {
return res.sendStatus(401);
}
// … use decoded variable here
});
Advertisement
Answer
You’ll never need to nest try/catches – a catch() will catch all errors underneath it.
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try…catch
Specifically:
The try…catch statement marks a block of statements to try and specifies a response should an exception be thrown.
However if you’re unsure that refreshToken will exist (it’s a good example not to trust web browsers), you can add it to the block you’re catching errors in:
router.post('/refresh', async (req, res) => {
let decoded;
try {
const refreshToken = req?.body?.token;
if ( ! token ) {
throw new Error('Token not supplied!')
}
decoded = jwt.verify(
refreshToken,
process.env.REFRESH_TOKEN_SECRET,
);
} catch(error) {
return res.sendStatus(401);
}
// … use decoded variable here
});