How to handle all exceptions in node.js

31,864

Solution 1

You can use the uncaughtException event on the process object to do what you want, but like others have said, domains and catching/handling errors at the correct level is recommended.

process.on('uncaughtException', function(err) {
  console.log('Caught exception: ' + err);
});

Solution 2

You should simply validate the request data within your routes, catch any error (try-catch will work here since it's a sync operation) and handle it by returning appropriate HTTP status (e.g. 400) to the caller and log the error. If you're using Express you don't even have to use try-catch as Express will catch all synchronous exceptions and allow you to handle it centrally.

I personally don't think that catching validation errors using process.on('uncaughtException') is the best match for your need for two main reasons:

  • At this location, you have no context of where the error took place and can't send back a response to the caller
  • Any type of unhandled error will arrive here, if you've no idea what type of error occured it's recommended to restart the process. It doesn't make sense to restart the process because of invalid input, for example it's too easy this way to bring the app down for any external caller (DDOS)

You may read here about other error handling best practices and specifically refer to bullets 4,6 and 10

Share:
31,864
Pars
Author by

Pars

Web and Mobile Developer at Chista Group. Prior lead Web Developer and Mobile Developer at Fanavari Tandis. Prior Web Developer at Lifeweb co. Prior Web Developer at Caspian co. Prior lead Web Developer at Padafand IT.

Updated on June 01, 2020

Comments

  • Pars
    Pars almost 4 years

    After working for a couple of weeks with node.js, I found that there is a difference between node.js server errors and regular server side languages like PHP.

    A simple example: IF an error happens in our website for ANY reason.

    in PHP
    If a user send some invalid data to server and MySQL, MySQL will output error to that specific user and the whole application won't go down.

    in Nodejs
    If a user send some invalid data to server and MySQL, nodejs Server will go down and so all the users will disconnect and there is no connection between users anymore.

    This is a really big problem. in large web applications, It is impossible to handle all errors to avoid Nodejs server to go down, and the question is,
    Is there any way to handle any unknown fatal errors and exceptions to a specific output or something like it.