Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Catch exception in node.js

I have a simple program, which needs to make sure I can connect to a Redis server. I use node-redis to connect and need to wait until Redis is started. I use this piece of code:

function initializeRedis(callback) {
    (function createClient(){
        var runner;
        try {
            client = redis.createClient();
        } catch (e) {
            setTimeout(createClient, 1000);
        }
        callback();
    })();
};

initializeRedis(function() {
// Work here
});

This is because without the try/catch, I got an exception from node.js:

 node.js:134
         throw e; // process.nextTick error, or 'error' event on first tick
         ^ Error: Redis connection to 127.0.0.1:6379 failed - ECONNREFUSED, Connection refused
     at Socket.<anonymous> (/var/www/php-jobs/node_modules/redis/index.js:88:28)
     at Socket.emit (events.js:64:17)
     at Array.<anonymous> (net.js:830:27)
     at EventEmitter._tickCallback (node.js:126:26)

When I start redis-server (Ubuntu machine) and start this script, everything works fine. If I stop redis-server and start the script, it doesn't catch the exception and still throws this same exception. How is that possible? I have a try/catch statement!

like image 442
Jurian Sluiman Avatar asked Nov 09 '11 20:11

Jurian Sluiman


People also ask

How do I catch exceptions in node js?

Exception handling in callback-based( asynchronous) code: In callback-based code, the one of the argument of the callback is err. If an error happens err is the error, if an error doesn't happen then err is null. The err argument can be followed any number of other arguments.

What is try catch in Nodejs?

The try... catch statement is comprised of a try block and either a catch block, a finally block, or both. The code in the try block is executed first, and if it throws an exception, the code in the catch block will be executed.

Is it good to use try catch in node js?

Note : It is a good practice to use Node. js Try Catch only for synchronous operations. We shall also learn in this tutorial as to why Try Catch should not be used for asynchronous operations.


1 Answers

After client = redis.createClient();, set a handler for the error event:

client.on('error', function(err) {
  // handle async errors here
});

Have a look at the stack trace - your code isn't in it, so there's no place where a try/catch could catch the error.

like image 174
thejh Avatar answered Sep 30 '22 10:09

thejh