Dans cette section, apprenons les méthodes de NodeJ pour mettre en œuvre des opérations non bloquantes.
Modifions d'abord le gestionnaire de démarrage:
La copie de code est la suivante:
var exec = require ("child_process"). exec;
fonction start () {
Console.log ("Demande Handler 'Start' a été appelé.");
var content = "vide";
exec ("ls -lah", fonction (erreur, stdout, stderr) {
contenu = stdout;
});
retourner le contenu;
}
fonction upload () {
Console.log ("Demande Handler 'Upload' a été appelé.");
retourner "bonjour téléchargement";
}
export.start = start;
exports.upload = upload;
Ce code crée un nouveau contenu de variable (la valeur initiale est "vide"), exécute la commande "ls -lah", attribue le résultat au contenu et renvoie enfin le contenu.
Nous avons introduit un nouveau module Node.js, Child_Process, qui est utilisé pour implémenter une opération non bloquante simple et pratique: Exec ().
Alors, que fait Exec ()?
Il exécute une commande shell à partir de node.js. Dans l'exemple ci-dessus, nous l'utilisons pour obtenir tous les fichiers dans le répertoire actuel ("ls -lah"), puis publions les informations de fichier au navigateur quand / startUrl demandes.
Nous commençons le serveur et visions "http: // localhost: 8888 / start" et nous constaterons que la sortie du contenu sur la page est vide.
Exec () fonctionne, et avec lui, nous pouvons effectuer des opérations de shell très longues sans forcer notre application à s'arrêter et à attendre cette opération.
Malgré cela, la sortie du contenu de la page ne semble pas être le résultat que nous voulons.
Analysons les raisons:
Notre code est exécuté de manière synchrone, ce qui signifie qu'après appeler Exec (), Node.js exécutera immédiatement le contenu de retour;
À l'heure actuelle, le contenu est toujours "vide", car la fonction de rappel passée à Exec () n'a pas encore été exécutée - car le fonctionnement d'EXEC () est asynchrone.
Dans la section suivante, nous expliquerons comment résoudre ce problème.