Fonctions Node.js


En JavaScript, une fonction peut recevoir un paramètre comme une autre fonction. Nous pouvons d'abord définir une fonction, puis la transmettre, ou nous pouvons définir la fonction directement là où les paramètres sont transmis.

L'utilisation des fonctions dans Node.js est similaire à Javascript. Par exemple, vous pouvez faire ceci :

function say(word) {
  console.log(word);
}

function execute(someFunction, value) {
  someFunction(value);
}

execute(say, "Hello");

Dans le code ci-dessus, nous utilisons la fonction say comme première variable du. exécuter la fonction transmise. Ce qui est renvoyé ici n'est pas la valeur de retour de say, mais say lui-même !

De cette façon, say devient la variable locale someFunction en exécution. Vous pouvez utiliser la fonction say en appelant someFunction() (avec parenthèses).

Bien sûr, puisque say a une variable, perform peut transmettre une telle variable lors de l'appel de someFunction.


Fonction anonyme

On peut passer une fonction en variable. Mais on n'est pas obligé de faire le tour de ce cercle "définir d'abord, puis passer". On peut directement définir et passer cette fonction entre parenthèses d'une autre fonction :

function execute(someFunction, value) {
  someFunction(value);
}

execute(function(word){ console.log(word) }, "Hello");

Où on accepte le premier paramètre en exécution directement. définit la fonction que nous allons passer à exécuter.

De cette façon, nous n’avons même pas besoin de donner un nom à la fonction, c’est pourquoi on l’appelle fonction anonyme.


Comment le passage de fonctions fait fonctionner le serveur HTTP

Avec ces connaissances, jetons un coup d'œil à notre serveur HTTP simple mais pas simple :

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);

Maintenant, il devrait cela semble beaucoup plus clair : nous avons passé une fonction anonyme à la fonction createServer.

Le même objectif peut être atteint avec un code comme celui-ci :

var http = require("http");

function onRequest(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}

http.createServer(onRequest).listen(8888);