Error Handling
The last thing you want is your entire server crashing because of an error, or, is that exactly what you want 🤷♀️? Regardless, you should have th choice. So you better handle those errors. Depending on the type of code (sync, promise, async callback, async await, etc) Node allows us to handle our errors how we see fit.
Process exiting
When a exception is thrown in Node.js, the current process will
exit with a code of 1
. This effectively errors out and stops
your programing completely. You can manually do this with:
process.exit(1)
Although you shouldn't. This is low level and offers no chance to catch or handle an exception to decide on what to do. Imagine your entire API shutting down and restarting just because a user sent a malformed payload that resulting the DB throwing and exception. That would be terrible.
Async Errors
When dealing with callbacks that are used for async operations, the standard pattern is:
fs.readFile(filePath, (error, result) => {
if (error) {
// do something
} else {
// yaaay
}
})
Callbacks accept the (error, result)
argument signature
where error could be null
if there is no error.
For promises
, you can continue to use the .catch()
pattern.
Nothing new to see here.
For async / await
you should use try / catch
.
try {
const result = await asyncAction()
} catch (e) {
// handle error
}
Sync Errors
For sync errors, try / catch
works just fine, just like with
async await.
try {
const result = syncAction()
} catch (e) {
// handle error
}
Catch All
Finally, if you just can't catch those pesky errors for any reason. Maybe some lib is throwing them and you can't catch them. You can use:
process.on('uncaughtException', cb)