Node.js pour les débutants

La programmation événementielle peut être accablante pour les débutants, ce qui peut rendre difficile le démarrage de Node.js. Mais ne laissez pas cela vous décourager. Dans cet article, je vais vous enseigner quelques notions de base de Node.js et vous expliquer pourquoi il est devenu si populaire..

Si vous avez besoin d’aide, vous pouvez toujours contacter l’un des experts JavaScript de Envato Studio. Que vous ayez besoin d’une correction de bogue ou d’une nouvelle fonctionnalité, vous trouverez un développeur JavaScript expérimenté pour vous aider..

Apprendre JavaScript: le guide complet

Nous avons créé un guide complet pour vous aider à apprendre le JavaScript, que vous soyez débutant en tant que développeur Web ou que vous souhaitiez explorer des sujets plus avancés..

introduction

Pour commencer à utiliser Node.js, vous devez d'abord comprendre les différences entre Node.js et les environnements de script côté serveur traditionnels (par exemple: PHP, Python, Ruby, etc.)..

Programmation Asynchrone

Node.js utilise une architecture de module pour simplifier la création d'applications complexes.

Les chances sont bonnes que vous soyez familier avec la programmation asynchrone; c'est, après tout, le "A" dans Ajax. Chaque fonction de Node.js est asynchrone. Par conséquent, tout ce qui bloquerait normalement le thread est à la place exécuté en arrière-plan. C’est la chose la plus importante à retenir à propos de Node.js. Par exemple, si vous lisez un fichier sur le système de fichiers, vous devez spécifier une fonction de rappel qui est exécutée à la fin de l'opération de lecture..

Vous faites tout!

Node.js n'est qu'un environnement, ce qui signifie que vous devez tout faire vous-même. Il n'y a pas de serveur HTTP par défaut, ni même de serveur. Cela peut être accablant pour les nouveaux utilisateurs, mais le gain est une application Web très performante. Un script gère toutes les communications avec les clients. Cela réduit considérablement le nombre de ressources utilisées par l'application. Par exemple, voici le code d’une application Node.js simple:

var i, a, b, c, max; max = 1000000000; var d = Date.now (); pour (i = 0; i < max; i++)  a = 1234 + 5678 + i; b = 1234 * 5678 + i; c = 1234 / 2 + i;  console.log(Date.now() - d);

Et voici l'équivalent écrit en PHP:

$ a = null; $ b = null; $ c = null; $ i = null; $ max = 1000000000; $ start = microtime (true); pour ($ i = 0; $ i < $max; $i++)  $a = 1234 + 5678 + $i; $b = 1234 * 5678 + $i; $c = 1234 / 2 + $i;  var_dump(microtime(true) - $start);

Regardons maintenant les chiffres de référence. Le tableau suivant répertorie les temps de réponse, en millisecondes, pour ces deux applications simples:

Nombre d'itérations Node.js PHP
100 2,00 0,14
10'000 3,00 10.53
1'000'000 15.00 1119.24
10'000'000 143.00 10621.46
1'000'000'000 11118.00 1036272.19

J'ai exécuté les deux applications à partir de la ligne de commande afin qu'aucun serveur ne retarde l'exécution des applications. J'ai exécuté chaque test dix fois et en moyenne les résultats. PHP est nettement plus rapide avec un nombre d'itérations réduit, mais cet avantage disparaît rapidement à mesure que le nombre d'itérations augmente. En fin de compte, PHP est 93% plus lent que Node.js!

Node.js est rapide, mais vous aurez besoin d'apprendre quelques choses pour bien l'utiliser..

Modules

Node.js utilise une architecture de module pour simplifier la création d'applications complexes. Les modules s'apparentent à des bibliothèques en C ou à des unités en Pascal. Chaque module contient un ensemble de fonctions liées au "sujet" du module. Par exemple, le http module contient des fonctions spécifiques à HTTP. Node.js fournit quelques modules de base prêts à l'emploi pour vous aider à accéder aux fichiers du système de fichiers, à créer des serveurs HTTP et TCP / UDP et à exécuter d'autres fonctions utiles..

Inclure un module est facile; appelez simplement le exiger() fonction, comme ceci:

var http = require ('http');

Node.js n'est qu'un environnement; tu dois tout faire toi-même.

le exiger() fonction renvoie la référence au module spécifié. Dans le cas de ce code, une référence à la http le module est stocké dans le http variable.

Dans le code ci-dessus, nous avons passé le nom d’un module à la exiger() une fonction. Ceci amène Node à rechercher un node_modules dossier dans le répertoire de notre application, et recherchez le http module dans ce dossier. Si le noeud ne trouve pas le node_modules dossier (ou le http module en son sein), il examine ensuite le cache de module global. Vous pouvez également spécifier un fichier réel en passant un chemin relatif ou absolu, comme suit:

var myModule = require ('./ myModule.js');

Les modules sont des morceaux de code encapsulés. Le code dans un module est principalement privé, ce qui signifie que les fonctions et les variables définies dans ceux-ci ne sont accessibles que de l'intérieur du module. Vous pouvez toutefois exposer des fonctions et / ou des variables à utiliser en dehors du module. Pour ce faire, utilisez le exportations object et renseignez ses propriétés et méthodes avec les éléments de code que vous souhaitez exposer. Considérez le module suivant comme exemple:

var PI = Math.PI; exports.area = fonction (r) retourne PI * r * r; ; exports.circumference = function (r) return 2 * PI * r; ;

Ce code crée un PI variable accessible uniquement par le code contenu dans le module; il n'est pas accessible en dehors du module. Ensuite, deux fonctions sont créées sur le exportations objet. Ces fonctions sont accessibles en dehors du module car elles sont définies sur le exportations objet. Par conséquent, PI est complètement protégé des interférences extérieures. Par conséquent, vous pouvez être assuré que surface() et circonférence() se comportera toujours comme ils le devraient (tant qu’une valeur est fournie pour le r paramètre).

Portée mondiale

Node est un environnement JavaScript fonctionnant dans le moteur JavaScript V8 de Google. En tant que tels, nous devrions suivre les meilleures pratiques que nous utilisons pour le développement côté client. Par exemple, nous devrions éviter de placer quoi que ce soit dans la portée globale. Cela n’est cependant pas toujours possible. La portée globale dans le noeud est GLOBAL (par opposition à la fenêtre dans le navigateur), et vous pouvez facilement créer une variable globale de fonction en omettant le var mot-clé, comme ceci:

variable globale = 1; fonction globale = fonction () …;

Encore une fois, les globals doivent être évités autant que possible. Alors soyez prudent et n'oubliez pas d'utiliser var en déclarant une variable.

Installation

Naturellement, nous devons installer Node avant de pouvoir écrire et exécuter une application. L'installation est simple, si vous utilisez Windows ou OS X; le site internet nodejs.org propose des programmes d'installation pour ces systèmes d'exploitation. Pour Linux, utilisez n’importe quel gestionnaire de paquets. Ouvrez votre terminal et tapez:

sudo apt-get update sudo apt-get install node

ou:

sudo aptitude update sudo aptitude install node

Node.js est dans les dépôts sid; vous devrez peut-être les ajouter à votre liste de sources:

sudo echo deb http://ftp.us.debian.org/debian/ sid main> /etc/apt/sources.list.d/sid.list

Mais sachez que l’installation de paquets Sid sur des systèmes plus anciens peut endommager votre système. Soyez prudent et retirez /etc/apt/sources.list.d/sid.list après avoir fini d'installer Node.

Installer de nouveaux modules

Node.js a un gestionnaire de packages, appelé Node Package Manager (NPM). Il est automatiquement installé avec Node.js et vous utilisez NPM pour installer de nouveaux modules. Pour installer un module, ouvrez votre terminal / ligne de commande, naviguez jusqu'au dossier souhaité et exécutez la commande suivante:

npm install module_name

Peu importe le système d'exploitation que vous avez; la commande ci-dessus installera le module que vous spécifiez à la place de nom_module.

L'application Hello World

Naturellement, notre premier script Node.js imprimera le texte 'Bonjour le monde!' à la console. Créez un fichier, appelé bonjour.js, et tapez le code suivant:

console.log ('Hello World!');

Maintenant exécutons le script. Ouvrez le terminal / la ligne de commande, naviguez jusqu'au dossier qui contient bonjour.js, et exécutez la commande suivante:

noeud hello.js

Tu devrais voir 'Bonjour le monde!' affiché dans la console.

Serveur HTTP

Passons à une application plus avancée. ce n'est pas aussi compliqué que vous ne le pensez. Commençons par le code suivant. Lisez les commentaires puis l'explication ci-dessous:

// Inclure le module http. var http = require ("http"); // Crée le serveur. La fonction passée en paramètre est appelée à chaque requête. // La variable de requête contient tous les paramètres de la requête // La variable de réponse vous permet de tout faire avec une réponse envoyée au client. http.createServer (function (request, response) // Attache un événement du finisseur. // Cet événement est appelé lorsque le client envoie toutes les données et attend une réponse. request.on ("end", function () // Ecrit des en-têtes dans la réponse // 200 est le code d'état HTTP (celui-ci signifie succès) // Le second paramètre contient les champs d'en-tête dans l'objet // Nous envoyons du texte brut, donc Content-Type doit être text / plain response.writeHead (200 , 'Content-Type': 'text / plain'); // Envoi des données et fin de la réponse. Response.end ('Hello HTTP!');); // Écoutez sur le port 8080.). Listen (8080);

Ce code est très simple. Vous pouvez envoyer plus de données au client en utilisant le response.write () méthode, mais vous devez l'appeler avant d'appeler response.end (). Enregistrez ce code sous http.js et tapez ceci dans votre console:

noeud http.js

Ouvrez votre navigateur et accédez à http: // localhost: 8080. Vous devriez voir le texte "Bonjour HTTP!" dans la page.

Gestion des paramètres d'URL

Comme je l'ai mentionné précédemment, nous devons tout faire nous-mêmes dans Node, y compris l'analyse des arguments de requête. Ceci est cependant assez simple. Regardez le code suivant:

// Inclure le module http, var http = require ("http"), // Et le module url, qui est très utile pour analyser les paramètres de requête. url = require ("url"); // Crée le serveur. http.createServer (function (demande, réponse) // Attache un écouteur à la fin de l'événement. request.on ('end', function () // Analyse la demande d'arguments et la stocke dans la variable _get. // Cette fonction analyse l'url de requête et renvoie la représentation d'objet. var _get = url.parse (request.url, true) .query; // Écriture des en-têtes dans la réponse. response.writeHead (200, 'Content-Type': 'text / plain '); // Envoi des données et fin de la réponse. Response.end (' Voici vos données: '+ _get [' data ']);); // Écoutez sur le port 8080.). Listen (8080) ;

Ce code utilise le parse () méthode du url module, un module principal de Node.js, permettant de convertir l'URL de la demande en objet. L'objet retourné a un question propriété, qui récupère les paramètres de l'URL. Enregistrer ce fichier sous get.js et exécutez-le avec la commande suivante:

noeud get.js

Ensuite, accédez à http: // localhost: 8080 /? data = put_some_text_here dans votre navigateur. Naturellement, changer la valeur de la Les données paramètre ne cassera pas le script.

Lecture et écriture de fichiers

Pour gérer les fichiers dans Node, nous utilisons le fs module (un module de base). Nous lisons et écrivons des fichiers en utilisant le fs.readFile () et fs.writeFile () méthodes, respectivement. Je vais expliquer les arguments après le code suivant:

// Inclure le module http, var http = require ("http"), // et le module mysql que vous venez d'installer. fs = require ("fs"); // Crée le serveur http. http.createServer (function (demande, réponse) // Attache le programme d'écoute à la fin de l'événement. request.on ("end", function () // Lit le fichier. fs.readFile ("test.txt", 'utf- 8 ', function (error, data) // Ecrit les en-têtes. Response.writeHead (200, ' Content-Type ':' text / plain '); // Incrémente le nombre obtenu à partir du fichier. Data = parseInt (data ) + 1; // Ecrit un nombre incrémenté dans le fichier. Fs.writeFile ('test.txt', données); // Termine la réponse avec un message intéressant. Response.end ('Cette page a été actualisée' + données + 'fois! '););); // Écoutez sur le port 8080.). Listen (8080);

Node.js a un gestionnaire de packages, appelé Node Package Manager (NPM). Il est automatiquement installé avec Node.js

Enregistrer ceci sous fichiers.js. Avant d’exécuter ce script, créez un fichier nommé test.txt dans le même répertoire que fichiers.js.

Ce code montre la fs.readFile () et fs.writeFile () méthodes. Chaque fois que le serveur reçoit une demande, le script lit un numéro dans le fichier, l'incrémente et écrit le nouveau numéro dans le fichier. le fs.readFile () La méthode accepte trois arguments: le nom du fichier à lire, le codage attendu et la fonction de rappel..

Écrire dans le fichier, du moins dans ce cas, est beaucoup plus simple. Nous n'avons pas besoin d'attendre les résultats, bien que vous vérifiiez les erreurs dans une application réelle. le fs.writeFile () La méthode accepte le nom du fichier et les données en tant qu'arguments. Il accepte également les troisième et quatrième arguments (les deux sont facultatifs) pour spécifier les fonctions d'encodage et de rappel, respectivement..

Maintenant, exécutons ce script avec la commande suivante:

noeud fichiers.js

Ouvrez-le dans le navigateur (http: // localhost: 8080) et rafraîchissez-le plusieurs fois. Maintenant, vous pouvez penser qu'il y a une erreur dans le code car il semble s'incrémenter de deux. Ce n'est pas une erreur. Chaque fois que vous demandez cette URL, deux demandes sont envoyées au serveur. La première demande est faite automatiquement par le navigateur, qui demande favicon.ico, et bien sûr, la deuxième demande concerne l’URL (http: // localhost: 8080).

Même si ce comportement n’est techniquement pas une erreur, c’est un comportement que nous ne souhaitons pas. Nous pouvons résoudre ce problème facilement en vérifiant l'URL de la demande. Voici le code révisé:

// Inclure le module http, var http = require ("http"), // et le module mysql que vous venez d'installer. fs = require ("fs"); // Crée le serveur http. http.createServer (function (demande, réponse) // Attache un écouteur à la fin de l'événement. request.on ('end', function () // Vérifie si les demandes de l'utilisateur / if (request.url == '/')  // Lire le fichier. Fs.readFile ('test.txt', 'utf-8', fonction (erreur, données) // Ecrit les en-têtes. Response.writeHead (200, 'Content-Type': 'text / plain '); // Incrémente le nombre obtenu à partir du fichier data = parseInt (data) + 1; // Ecrit un nombre incrémenté dans le fichier. fs.writeFile (' test.txt ', data); // Termine la réponse avec un message agréable. response.end ('Cette page a été rafraîchie' + data + 'fois!'););  Indiquer que le fichier demandé n'a pas été trouvé. response.writeHead (404); // Et demande de fin sans envoyer de données. response.end ();); // Écouter sur le port 8080.). listen (8080);

Testez-le maintenant. cela devrait fonctionner comme prévu.

Accéder aux bases de données MySQL

La plupart des technologies côté serveur traditionnelles disposent d'un moyen intégré de connexion et d'interrogation d'une base de données. Avec Node.js, vous devez installer une bibliothèque. Pour ce tutoriel, j'ai choisi le logiciel stable et facile à utiliser. noeud-mysql. Le nom complet de ce module est [email protected] (tout ce qui suit le @ est le numéro de version). Ouvrez votre console, accédez au répertoire dans lequel vous avez stocké vos scripts et exécutez la commande suivante:

npm install [email protected]

Ceci télécharge et installe le module, et crée également le node_modules dossier dans le répertoire en cours. Voyons maintenant comment nous pouvons utiliser cela dans notre code. voir l'exemple suivant:

// Inclure le module http, var http = require ('http'), // Et le module mysql que vous venez d'installer. mysql = require ("mysql"); // Crée la connexion. // Data est la nouvelle installation de mysql par défaut et devrait être modifié en fonction de votre configuration. var connection = mysql.createConnection (utilisateur: "racine", mot de passe: "", base de données: "nom_base"); // Crée le serveur http. http.createServer (function (request, response) // Attache un écouteur à la fin de l'événement. request.on ('end', function () // Interroge la base de données. connection.query ('SELECT * FROM votre_table;', fonction (erreur, lignes, champs) response.writeHead (200, 'Content-Type': 'x-application / json'); // Envoie les données sous forme de chaîne JSON. // La variable Rows contient le résultat de la requête. response.end (JSON.stringify (rows)););); // Écoutez sur le port 8080.). listen (8080);

Interroger la base de données avec cette bibliothèque est facile; entrez simplement la chaîne de requête et la fonction de rappel. Dans une application réelle, vous devez vérifier s’il existe des erreurs (le Erreur paramètre ne sera pas indéfini si des erreurs se sont produites) et envoyer des codes de réponse en fonction du succès ou de l’échec de la requête. Notez également que nous avons défini le Type de contenu à x-application / json, qui est le type MIME valide pour JSON. le rangées paramètre contient le résultat de la requête, et nous convertissons simplement les données en rangées à une structure JSON en utilisant le JSON.stringify () méthode.

Enregistrer ce fichier sous mysql.js, et exécutez-le (si vous avez MySQL installé, c'est):

noeud mysql.js

Aller vers http: // localhost: 8080 dans votre navigateur, et vous devriez être invité à télécharger le fichier au format JSON.

Conclusion

Chaque fonction de Node.js est asynchrone.

Node.js nécessite un travail supplémentaire, mais le bénéfice d'une application rapide et robuste en vaut la peine. Si vous ne voulez pas tout faire au niveau le plus bas, vous pouvez toujours choisir un framework, tel que> Express, pour faciliter le développement d'applications..

Node.js est une technologie prometteuse et un excellent choix pour une application à forte charge. Des sociétés telles que Microsoft, eBay et Yahoo l'ont prouvé. Si vous n’êtes pas sûr d’héberger votre site Web / votre application, vous pouvez toujours utiliser une solution VPS bon marché ou divers services en nuage, tels que Microsoft Azure et Amazon EC2. Ces deux services offrent des environnements évolutifs à un prix raisonnable.

N'oubliez pas de commenter si vous avez des questions!