Guide Node.js, Partie 1: Informations générales et mise en route

Nous commençons à publier une série de documents qui sont une traduction étape par étape du didacticiel Node.js pour les débutants. À savoir, dans ce cas, le «débutant» est quelqu'un qui a une certaine connaissance du navigateur JavaScript. Il a entendu dire qu'il existe une plate-forme serveur, dont les programmes sont également écrits en JS, et souhaite maîtriser cette plate-forme. Peut-être trouverez-vous ici quelque chose d'utile même si vous êtes déjà familier avec Node.js.

Soit dit en passant, l'année dernière, nous avions un projet similaire en termes de scripts bash. Ensuite, après avoir publié tous les matériaux prévus, nous les avons collectés sous forme de fichier PDF . Il est également prévu de le faire cette fois.



Aujourd'hui, nous allons discuter des fonctionnalités de Node.js, commencer à se familiariser avec l'écosystème de cette plate-forme et écrire le «Hello World» côté serveur.


Évaluation de Node.js


Node.js est un runtime JavaScript multiplateforme open source qui s'exécute sur des serveurs. Depuis la sortie de cette plateforme en 2009, elle est devenue extrêmement populaire et joue aujourd'hui un rôle très important dans le domaine du développement web. Si vous considérez le nombre d'étoiles qu'un certain projet sur GitHub a collecté comme indicateur de popularité, alors Node.js , qui compte plus de 50 000 étoiles, est un projet très, très populaire.

La plateforme Node.js est basée sur le moteur JavaScript V8 de Google, qui est utilisé dans le navigateur Google Chrome. Cette plate-forme est principalement utilisée pour créer des serveurs Web, mais sa portée ne se limite pas à cela.

Considérez les principales fonctionnalités de Node.js.

▍Vitesse


L'une des principales caractéristiques attrayantes de Node.js est la vitesse. Le code JavaScript exécuté dans Node.js peut être deux fois plus rapide que le code écrit dans des langages compilés comme C ou Java, et des ordres de grandeur plus rapides que les langages interprétés comme Python ou Ruby. La raison en est l'architecture non bloquante de la plateforme, et les résultats spécifiques dépendent des tests de performances utilisés, mais, en général, Node.js est une plateforme très rapide.

▍Simplicité


La plateforme Node.js est facile à apprendre et à utiliser. En fait, c'est vraiment très simple, c'est particulièrement visible par rapport à d'autres plates-formes de serveurs.

▍JavaScript


Node.js exécute du code écrit en JavaScript. Cela signifie que des millions de développeurs frontaux qui utilisent déjà JavaScript dans le navigateur peuvent écrire à la fois du code serveur et client dans le même langage de programmation sans avoir à apprendre un outil complètement nouveau pour passer au développement de serveur.

Le navigateur et le serveur utilisent les mêmes concepts de langage. De plus, dans Node.js, vous pouvez rapidement passer à l'utilisation des nouvelles normes ECMAScript au fur et à mesure de leur mise en œuvre sur la plateforme. Pour ce faire, vous n'avez pas besoin d'attendre que les utilisateurs mettent à jour leur navigateur, car Node.js est un environnement de serveur que le développeur contrôle entièrement. Par conséquent, de nouvelles fonctionnalités linguistiques sont disponibles lorsque vous installez la version de prise en charge de Node.js.

Moteur 8V8


Au cœur de Node.js, entre autres solutions, se trouve le moteur JavaScript open source V8 de Google, qui est utilisé dans le navigateur Google Chrome et dans d'autres navigateurs. Cela signifie que Node.js utilise les réalisations de milliers d'ingénieurs qui ont rendu l'exécution JavaScript JavaScript incroyablement rapide et continuent de travailler à l'amélioration de la V8.

▍Asynchronie


Dans les langages de programmation traditionnels (C, Java, Python, PHP), toutes les instructions sont, par défaut, bloquantes sauf si le développeur se charge explicitement de l'exécution de code asynchrone. Par conséquent, si, par exemple, dans un tel environnement, une demande réseau est effectuée pour charger du code JSON, l'exécution du flux à partir duquel la demande est effectuée sera suspendue jusqu'à la fin de la réception et du traitement de la réponse.

JavaScript simplifie considérablement l'écriture de code asynchrone et non bloquant à l'aide d'un seul thread, de fonctions de rappel (rappels) et d'une approche de développement pilotée par les événements. Chaque fois que nous devons effectuer une opération lourde, nous transmettons le mécanisme de rappel approprié, qui sera appelé immédiatement après la fin de cette opération. Par conséquent, pour que le programme continue de fonctionner, il n'est pas nécessaire d'attendre les résultats de telles opérations.

Un mécanisme similaire est apparu dans les navigateurs. Nous ne pouvons pas nous permettre d'attendre, par exemple, l'achèvement de la demande AJAX, sans pouvoir répondre aux actions de l'utilisateur, par exemple, les clics sur les boutons. Afin de permettre aux utilisateurs de travailler avec des pages Web, tout et le téléchargement de données à partir du réseau et le traitement des clics sur les boutons doivent se produire simultanément, en temps réel.

Si vous avez déjà créé un gestionnaire d'événements de clic de bouton, vous avez déjà utilisé des techniques de programmation asynchrone.

Les mécanismes asynchrones permettent à un seul serveur Node.js de traiter simultanément des milliers de connexions, sans charger le programmeur de tâches de gestion des flux et d'organisation de l'exécution de code parallèle. De telles choses sont souvent des sources d'erreur.

Node.js fournit au développeur des mécanismes d'entrée-sortie de base non bloquants et, en général, les bibliothèques utilisées dans le cadre Node.js sont écrites à l'aide de paradigmes non bloquants. Cela fait du blocage du comportement du code l'exception plutôt que la norme.

Lorsque Node.js doit effectuer une opération d'E / S, telle que le téléchargement de données à partir du réseau, l'accès à la base de données ou au système de fichiers, au lieu de bloquer le thread principal en attente des résultats d'une telle opération, Node.js lance son exécution et continue à faire d'autres choses jusqu'à ce que jusqu'à ce que les résultats de cette opération soient reçus.

▍Bibliothèques


Grâce à la simplicité et à la commodité de travailler avec le gestionnaire de paquets pour Node.js appelé npm , l'écosystème Node.js est en plein essor. Maintenant, dans le registre npm, il y a plus d'un demi-million de packages open source que tout développeur Node.js peut utiliser librement.
Après avoir examiné certaines des principales fonctionnalités de la plateforme Node.js, nous allons la tester en action. Commençons par l'installation.

Installez Node.js


Node.js peut être installé de différentes manières, que nous allons maintenant considérer.
Ainsi, les packages d'installation officiels pour toutes les principales plates-formes peuvent être trouvés ici .

Il existe un autre moyen très pratique d'installer Node.js, qui consiste à utiliser le gestionnaire de packages disponible dans le système d'exploitation. Par exemple, le gestionnaire de packages macOS, qui est la norme de facto dans ce domaine, s'appelle Homebrew . S'il se trouve sur votre système, vous pouvez installer Node.js en exécutant cette commande sur la ligne de commande:

brew install node 

Une liste des gestionnaires de packages pour d'autres systèmes d'exploitation, y compris Linux et Windows, peut être trouvée ici .

Un gestionnaire de version populaire pour Node.js est nvm . Cet outil vous permet de basculer facilement entre les différentes versions de Node.js, avec lui, vous pouvez, par exemple, installer et essayer la nouvelle version de Node.js, puis, si nécessaire, revenir à l'ancienne. Nvm est également utile dans les situations où vous devez essayer du code sur l'ancienne version de Node.js.

Je conseillerais aux débutants d'utiliser les programmes d'installation officiels de Node.js. Pour les utilisateurs de macOS, je recommanderais d'installer Node.js à l'aide de Homebrew. Maintenant que vous avez installé Node.js, il est temps d'écrire «Hello World».

La première application Node.js


L'exemple le plus courant de la première application pour Node.js est un simple serveur Web. Voici son code:

 const http = require('http') const hostname = '127.0.0.1' const port = 3000 const server = http.createServer((req, res) => { res.statusCode = 200 res.setHeader('Content-Type', 'text/plain') res.end('Hello World\n') }) server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`) }) 

Pour exécuter ce code, enregistrez-le dans le fichier server.js et exécutez la commande suivante dans le terminal:

 node server.js 

Pour vérifier le serveur, ouvrez un navigateur et entrez http://127.0.0.1:3000 dans la barre d'adresse, c'est-à-dire l'adresse du serveur qui sera affichée dans la console après son lancement réussi. Si tout fonctionne comme il se doit, "Hello World" sera affiché sur la page.

Regardons cet exemple.

Tout d'abord, notez que le code contient la commande de connexion du module http .

La plate-forme Node.js est propriétaire d'un merveilleux ensemble standard de modules , qui comprend des mécanismes bien développés pour travailler avec le réseau.

La méthode createServer() de l'objet http crée un nouveau serveur HTTP et le renvoie.

Le serveur est configuré pour écouter sur un port spécifique sur un hôte donné. Lorsque le serveur est prêt, le rappel correspondant est appelé, nous informant que le serveur fonctionne.

Lorsque le serveur reçoit la demande, l'événement de request est déclenché, ce qui fournit deux objets. Le premier est la demande ( req , l'objet http.IncomingMessage ), le second est la réponse ( res , l'objet http.ServerResponse ). Ce sont les mécanismes de traitement des requêtes HTTP les plus importants.

Le premier fournit des informations sur la demande à notre disposition. Dans notre exemple simple, nous n'utilisons pas ces données, mais, si nécessaire, en utilisant l'objet req , vous pouvez accéder aux en-têtes de demande et aux données qui y sont transmises.

Le second est nécessaire pour former et envoyer une réponse à la demande.

Dans ce cas, nous formulons la réponse à la demande comme suit. Tout d'abord, définissez la propriété statusCode sur 200 , ce qui indique que l'opération a réussi:

 res.statusCode = 200 

Ensuite, nous définissons l'en Content-Type tête Content-Type :

 res.setHeader('Content-Type', 'text/plain') 

Après cela, nous terminons la préparation de la réponse en ajoutant son contenu comme argument à la méthode end() :

 res.end('Hello World\n') 

Nous avons déjà dit qu'un écosystème puissant s'est formé autour de la plateforme Node.js. Nous allons maintenant discuter de quelques frameworks et outils d'aide populaires pour Node.js.

Cadres et outils d'aide pour Node.js


Node.js est une plate-forme de bas niveau. Afin de simplifier son développement et de faciliter la vie des programmeurs, un grand nombre de bibliothèques ont été créées. Certains d'entre eux sont devenus très populaires au fil du temps. Voici une courte liste de bibliothèques qui, je pense, sont excellentes et méritent d'être explorées:

  • Express Cette bibliothèque fournit au développeur un outil extrêmement simple mais puissant pour créer des serveurs Web. La clé du succès d'Express a été une approche minimaliste et une concentration sur les mécanismes de serveur de base sans chercher à imposer une certaine vision de l'architecture de serveur «unique».
  • Meteor Il s'agit d'un puissant framework full-stack qui implémente une approche isomorphe pour développer des applications JavaScript et utiliser du code sur le client et le serveur. Une fois Meteor était un outil indépendant qui comprend tout ce dont un développeur pourrait avoir besoin. Maintenant, il est également intégré aux bibliothèques frontales telles que React , Vue et Angular . Meteor, en plus de développer des applications Web conventionnelles, peut également être utilisé dans le développement mobile.
  • Koa Ce framework web a été créé par la même équipe qui travaille sur Express. Lors de son développement, basé sur des années d'expérience de travail sur Express, une attention particulière a été portée à la simplicité de la solution et à sa compacité. Ce projet est apparu comme une solution au problème d'apporter des changements sérieux à Express qui sont incompatibles avec d'autres mécanismes-cadres qui pourraient diviser la communauté.
  • Next.js. Ce cadre est conçu pour organiser le rendu côté serveur des applications React .
  • Micro . Il s'agit d'une bibliothèque très compacte pour créer des microservices HTTP asynchrones.
  • Socket.io . Il s'agit d'une bibliothèque de développement d'applications réseau en temps réel.

En fait, dans l'écosystème Node.js, vous pouvez trouver une bibliothèque auxiliaire pour résoudre presque toutes les tâches. Comme vous le savez, la construction d'un tel écosystème prend beaucoup de temps. La plateforme Node.js est apparue en 2009. Au cours de son existence, il s'est passé beaucoup de choses qui valent la peine d'être connues d'un programmeur qui souhaite apprendre cette plate-forme.

Une brève histoire de Node.js


Node.js a 9 ans cette année. Bien sûr, ce n'est pas tellement, si l'on compare cet âge avec l'âge de JavaScript, qui a déjà 23 ans, ou avec l'âge de 25 ans du Web, existant sous la forme sous laquelle nous le connaissons, si vous comptez à partir de l'apparition du navigateur Mosaic.

9 ans est une courte période pour la technologie, mais il semble maintenant que la plateforme Node.js ait toujours existé.

J'ai commencé à travailler avec Node.js depuis les premières versions de la plateforme alors qu'elle n'avait que 2 ans. Même alors, malgré le fait qu'il n'y avait pas tellement d'informations sur Node.js, on pouvait déjà sentir que Node.js était très sérieux.

Parlons maintenant des technologies qui sous-tendent Node.js et considérons brièvement les principaux événements liés à cette plate-forme.

Ainsi, JavaScript est un langage de programmation qui a été créé dans Netscape en tant que langage de script conçu pour gérer les pages Web dans le navigateur Netscape Navigator .

Une partie des activités de Netscape consistait à vendre des serveurs Web, qui comprenaient un environnement appelé Netscape LiveWire. Il vous a permis de créer des pages Web dynamiques à l'aide de JavaScript côté serveur. Comme vous pouvez le voir, l'idée d'utiliser JS pour le développement de serveurs est beaucoup plus ancienne que Node.js. Cette idée est presque aussi ancienne que JavaScript lui-même, mais JS côté serveur n'a pas gagné en popularité à l'époque en question.

L'un des facteurs clés en raison desquels la plate-forme Node.js est devenue si répandue et populaire est le moment de son apparition. Ainsi, quelques années avant cela, JavaScript a commencé à être considéré comme un langage sérieux. Cela s'est produit grâce aux applications Web 2.0, telles que Google Maps ou Gmail, qui ont montré au monde les capacités des technologies Web modernes.

Grâce à la guerre des navigateurs compétitive, qui se poursuit à ce jour, les performances des moteurs JavaScript ont considérablement augmenté. Les équipes de développement derrière les principaux navigateurs travaillent chaque jour pour améliorer les performances de leurs solutions, ce qui a un effet bénéfique sur JavaScript en général. L'un de ces moteurs est le V8 déjà mentionné, utilisé dans le navigateur Chrome et utilisé dans Node.js. C'est l'un des résultats de la volonté des développeurs de navigateurs de disposer d'un code JS performant.

Bien sûr, la popularité de Node.js ne repose pas seulement sur une combinaison réussie de circonstances et sur le fait que cette plate-forme est apparue au bon moment. Elle a présenté au monde une approche innovante du développement côté serveur en JavaScript. Considérez les jalons de l'histoire de Node.js.

▍2009


  • L'avènement de Node.js
  • Créez la première option npm .

▍2010



▍2011


  • Quittez npm 1.0.
  • De grandes entreprises comme LinkedIn et Uber ont commencé à utiliser Node.js.

▍2012


  • L'augmentation rapide de la popularité de Node.js.

▍2013


  • L'avènement de Ghost , la première grande plateforme de publication utilisant Node.js.
  • Libération de Koa .

▍2014


  • Des événements dramatiques ont eu lieu cette année. Le projet IO.js est apparu , qui est un fork de Node.js, dont le but était, entre autres, d'introduire le support ES6 et d'accélérer le développement de la plateforme.

▍2015


  • Fondation de la Fondation Node.js.
  • Fusion d'IO.js et de Node.js.
  • Dans npm, il est possible de travailler avec des modules privés.
  • Sortie Node.js 4 (il est à noter que cette plateforme ne disposait pas des versions 1, 2 et 3).

▍2016


  • Incident avec le package du pavé gauche .
  • L'apparition du fil .
  • Quittez Node.js 6.

▍2017


  • Npm commence à se concentrer davantage sur la sécurité.
  • Node de sortie.js 8
  • L'avènement du support HTTP / 2 .
  • Le V8 est officiellement reconnu comme un moteur JS conçu non seulement pour Chrome, mais aussi pour Node.
  • 3 milliards de téléchargements depuis npm sont effectués chaque semaine.

▍2018


  • Quittez Node.js 10.
  • Prise en charge des modules ES .
  • Support expérimental pour mjs .

Résumé


Aujourd'hui, vous avez découvert la plate-forme Node.js, compris son installation, écrit et testé la première application simple. La prochaine fois, nous parlerons de la quantité de connaissances JavaScript dont vous avez besoin pour réussir le développement de Node.js, en quoi le code JS côté navigateur et côté serveur sont différents, et discuterons de quelques astuces de développement Node.js.

Chers lecteurs! Dites-moi, avez-vous lancé Hello World pour Node.js?

Les parties suivantes du manuel:
Partie 1: Informations générales et mise en route
Partie 2: JavaScript, V8, quelques astuces de développement
Partie 3: Hébergement, REPL, travailler avec la console, les modules
Partie 4: fichiers npm, package.json et package-lock.json
Partie 5: npm et npx
Partie 6: boucle d'événements, pile d'appels, temporisateurs
Partie 7: Programmation asynchrone

Source: https://habr.com/ru/post/fr422893/


All Articles