web-dev-qa-db-fra.com

paramètres par défaut dans node.js

Comment procéder pour définir les paramètres par défaut dans node.js?

Par exemple, disons que j'ai une fonction qui devrait normalement ressembler à ceci:

function(anInt, aString, cb, aBool=true){
   if(bool){...;}else{...;}
   cb();
}

L'appeler ressemblerait à quelque chose comme ceci:

function(1, 'no', function(){
  ...
}, false);

ou:

function(2, 'yes', function(){
  ...
});

Cependant, il ne semble pas que node.js supporte les paramètres par défaut de cette manière. Quelle est la meilleure façon d'accomplir ci-dessus?

26
hownowbrowncow

La solution la plus simple est de dire à l'intérieur de la fonction

var variable1 = typeof variable1  !== 'undefined' ?  variable1  : default_value;

Ainsi, si l'utilisateur n'a pas fourni variable1, vous le remplacez par la valeur par défaut.

Dans ton cas:

function(anInt, aString, cb, aBool) {
  aBool = typeof aBool  !== 'undefined' ? aBool : true;
  if(bool){...;}else{...;}
  cb();
}
11
Zakkery

réponse 2017: le nœud 6 et supérieur inclut les paramètres par défaut ES6

var sayMessage = function(message='This is a default message.') {
  console.log(message);
}
73
mikemaccana

Voir problème github . Vous pouvez activer les paramètres par défaut dans les versions de nœud actuelles (par exemple 5.8.0) en utilisant --harmony_default_parameters

node --harmony_default_parameters --eval "const t = function(i = 42) { return i }; console.log(t());"

[...]

Il sera activé par défaut dans la version 6.0

2
serv-inc

Vous pouvez utiliser bind pour créer une nouvelle fonction contenant déjà un ensemble d'arguments:

fn1 = fn.bind(fn, 1, 'no', function(){}, false);
fn1();
fn2 = fn.bind(fn, 2, 'yes', function(){});
fn2(true);

Alternativement, des langues comme CoffeeScript qui se compilent en JavaScript fournissent des mécanismes qui prennent en charge les paramètres par défaut sans avoir à utiliser bind:

CoffeeScript:

fn = (bar='foo') ->

JavaScript:

fn = function(bar) {
  if (bar == null) {
    bar = 'foo';
  }
};
1
Wex