web-dev-qa-db-fra.com

Comment arrêter l'exécution d'un script node.js?

Disons que j'ai ce 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.');

}

Et comme vous pouvez le voir, j'aimerais empêcher le script d'exécuter des fonctions en aval en cas d'erreur.

J'ai réussi à y parvenir en ajoutant return; Après l'envoi de la réponse d'erreur:

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.');

}

Mais est-ce la manière "correcte" de faire les choses?

Alternatives

J'ai également vu des exemples qui utilisent process.exit(); et process.exit(1);, mais cela me donne une erreur 502 Bad Gateway (Je suppose que cela tue le nœud?).

Et callback();, qui vient de me donner une erreur "non définie".

Quelle est la manière "correcte" d'arrêter un script node.js à un moment donné et d'empêcher l'exécution de fonctions en aval?

18
AJB

L'utilisation d'un return est la bonne façon d'arrêter l'exécution d'une fonction. Vous avez raison en ce que process.exit() tuerait le processus de noeud entier, plutôt que d'arrêter simplement cette fonction individuelle. Même si vous utilisez une fonction de rappel, vous souhaitez la retourner pour arrêter l'exécution de la fonction.

ASIDE: Le rappel standard est une fonction où le premier argument est une erreur, ou null s'il n'y a pas eu d'erreur, donc si vous utilisiez un rappel, ce qui précède ressemblerait à:

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.');

}
37
Tim Brown