Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to stop execution of a node.js script?

Tags:

node.js

exit

Say I've got this script:

var thisIsTrue = false;  exports.test = function(request,response){      if(thisIsTrue){         response.send('All is good!');     }else{         response.send('ERROR! ERROR!');         // Stop script execution here.     }      console.log('I do not want this to happen if there is an error.');  } 

And as you can see, I'd like to stop the script from executing any downstream functions if there's an error.

I've managed to achieve this by adding return; after the error response is sent:

var thisIsTrue = false;  exports.test = function(request,response){      if(thisIsTrue){         response.send('All is good!');     }else{         response.send('ERROR! ERROR!');         return;     }      console.log('I do not want this to happen if there is an error.');  } 

But is that the 'correct' way to do things?

Alternatives

I've also seen examples that use process.exit(); and process.exit(1);, but that gives me a 502 Bad Gateway error (I assume because it kills node?).

And callback();, which just gave me an 'undefined' error.

What is the 'correct' way to stop a node.js script at any given point and prevent any downstream functions from executing?

like image 591
AJB Avatar asked Mar 12 '14 21:03

AJB


People also ask

How do I stop a node JS execution code?

Method 1: Using the Ctrl+C key I hope everyone knows this shortcut to exit any Node. js process from outside. This shortcut can be used to stop any running process by hitting this command on terminal.

How do you stop a function execution?

When you click Call the function button, it will execute the function. To stop the function, click Stop the function execution button.


Video Answer


2 Answers

Using a return is the correct way to stop a function executing. You are correct in that process.exit() would kill the whole node process, rather than just stopping that individual function. Even if you are using a callback function, you'd want to return it to stop the function execution.

ASIDE: The standard callback is a function where the first argument is an error, or null if there was no error, so if you were using a callback the above would look like:

var thisIsTrue = false;  exports.test = function(request, response, cb){      if (thisIsTrue) {         response.send('All is good!');         cb(null, response)     } else {         response.send('ERROR! ERROR!');         return cb("THIS ISN'T TRUE!");     }      console.log('I do not want this to happen. If there is an error.');  } 
like image 199
Tim Brown Avatar answered Sep 30 '22 18:09

Tim Brown


You should use return, which will help you respond to what happened. Here's a bit cleaner version, basically first validate whatever you want to validate, rather than encapsulating everything in if{}else{} statements

exports.test = function(request, response, cb){      if (!thisIsTrue) {         response.send('ERROR! ERROR!');         return cb("THIS ISN'T TRUE!");     }      response.send('All is good!');     cb(null, response)      console.log('I do not want this to happen. If there is an error.');  } 

Another way would be to use throw

exports.test = function(request, response, cb){      if (!thisIsTrue) {         response.send('ERROR! ERROR!');         cb("THIS ISN'T TRUE!");         throw 'This isn\'t true, perhaps it should';     }      response.send('All is good!');     cb(null, response)      console.log('I do not want this to happen. If there is an error.');  } 

Finally, examples that would stop entire app from further execution:

a) Throw an error, which will also help you debug the app (wouldn't completely stop the app, if the test() function was wrapper in try{}catch(e){}):

throw new Error('Something went wrong')

b) Stop script execution (works with Node.js):

process.exit()

like image 27
mate.gvo Avatar answered Sep 30 '22 17:09

mate.gvo