Node.js est une nouvelle technologie étonnante, mais, à moins que vous ne soyez un développeur JavaScript, le processus de familiarisation avec cette dernière peut rapidement devenir un peu fastidieux. Mais c'est pourquoi nous sommes ici! Si tu veux vraiment apprendre à utiliser Node.js, cet ensemble d'articles et de screencasts fera l'affaire.
Salut les gars, je m'appelle Christopher Roach et je vous guiderai tout au long de cette série de screencasts sur Node.js. Dans cette série, nous utiliserons Node pour créer un moteur de blog simple, similaire à celui rendu célèbre par la célèbre vidéo d'introduction à Ruby on Rails. Le but de cette série est de vous donner, à vous, spectateur, une idée réelle du fonctionnement de Node afin que, même lorsque vous travaillez avec l'un des frameworks de développement Web populaires, tels que Express ou Getty, vous vous sentiez assez à l'aise avec. le fonctionnement interne de Node pour pouvoir descendre dans sa source et apporter les modifications nécessaires à vos besoins.
Avant d'entrer dans les détails de ce qu'est Node et de la raison pour laquelle vous souhaitez l'utiliser, j'aimerais commencer et nous lancer dans l'installation de Node car, bien que très facile, cela peut prendre un certain temps.
Le nœud est encore très jeune et est en développement actif, il est donc préférable d'installer à partir de la source.
Node est encore très jeune et est en développement actif, il est donc préférable d'installer à partir de la source. Cela dit, Node a très peu de dépendances et la compilation n’est donc pas aussi compliquée que d’autres projets avec lesquels vous vous êtes déjà battus. Pour obtenir le code, visitez le site Web de Node.js. Si vous faites défiler la page jusqu'à la section de téléchargement, vous trouverez plusieurs choix. Si vous avez installé Git, vous pouvez créer un clone du référentiel et l’installer à partir de là. Sinon, il existe un lien vers une archive que vous pouvez télécharger à la place. Dans cette vidéo, je vais garder les choses simples et installer à partir de l'archive.
Pendant que le téléchargement est en cours, c’est le bon moment de mentionner que des efforts sont en cours pour fournir un port de Node pour Windows, ainsi que des instructions pour l’installation sur Windows pour Cygwin ou MinGW. Je crois qu'il est même possible d'installer des paquets binaires, mais au moment d'écrire ces lignes, son environnement principal est constitué des plateformes Unix et Linux. Si vous êtes sur une machine Windows, vous pouvez cliquer sur le lien pour obtenir des instructions de construction et suivre l'ensemble d'instructions pour une installation de Windows. Vous pouvez également installer une version de Linux, telle qu'Ubuntu, et y installer Node..
Une fois le téléchargement terminé, décompressez et décompressez le paquet avec tar -xvf
et CD
dans le répertoire qu'il a créé. Nous devons d’abord faire un ./ configure
, puis faire
, et enfin faire installer
. Cela va prendre un peu de temps à construire, donc je vais laisser cela courir en arrière-plan et saisir cette occasion pour parler un peu plus de Node, et de la raison pour laquelle cela provoque un tel engouement dans la communauté de développement Web..
Nœud est JavaScript sur le serveur.
Ainsi, si cet article et cette vidéo constituent votre première introduction à Node, vous vous demandez probablement de quoi il s'agit et en quoi il vaut la peine d'apprendre, alors qu'il existe déjà de nombreux autres cadres de développement Web parmi lesquels choisir. Eh bien, pour commencer, une des raisons qui vous tient à coeur est que Node est un script JavaScript sur le serveur. En réalité, si vous travaillez sur le Web, aimez-le ou détestez-le, vous allez devoir utiliser JavaScript à un moment donné. . Utiliser JavaScript comme langage principal ainsi que pour le côté client signifie beaucoup moins de changement de contexte pour votre cerveau.
Oh, je sais ce que vous pensez: "Node est donc JavaScript sur le serveur, eh bien, c’est génial, mais il ya eu d’autres tentatives de JavaScript sur le serveur qui ont pratiquement échoué."
Eh bien, la réponse courte est la suivante: le nœud est un JavaScript côté serveur qui a finalement été correctement exécuté. Là où d'autres tentatives ont été essentiellement des ports des frameworks Web MVC traditionnels vers le langage JavaScript, Node est quelque chose de totalement différent. Selon son site Web, Node est evented I / O pour V8 JavaScript, mais qu'est-ce que cela signifie exactement? Commençons par V8.
V8 est l'implémentation JavaScript ultra rapide de Google utilisée dans son navigateur Chrome..
Grâce à une application vraiment ingénieuse de la compilation "Just in Time", la V8 est capable d’atteindre une vitesse de JavaScript qui rend jalousent les utilisateurs d’autres langages dynamiques, tels que Python et Ruby. Jetez un coup d'œil à certains points de repère et je crois que vous serez surpris. V8 JavaScript est présent dans de nombreux langages basés sur JVM tels que Clojure et Java et des langages compilés, tels que Go dans de nombreux cas..
La capacité de JavaScript à éviter les fermetures simplifie la programmation événementielle.
L'autre phrase clé de cette déclaration est evented I / O. Celui-ci est le plus gros. Pour créer un serveur Web, vous avez essentiellement le choix entre deux demandes multiples de connexion simultanées. La première, qui est la voie la plus traditionnelle empruntée par les serveurs Web tels que Apache, consiste à utiliser des threads pour gérer les demandes de connexion entrantes. L'autre méthode, celle prise par Node et certains serveurs modernes extrêmement rapides tels que Nginx et Thin, consiste à utiliser un seul thread non bloquant avec une boucle d'événement. C’est là que la décision d’utiliser JavaScript prend tout son sens, car JavaScript a été conçu pour être utilisé dans un environnement basé sur une boucle d’événements à thread unique: le navigateur. La capacité de JavaScript à éviter les fermetures simplifie grandement la programmation par événements. En gros, vous appelez simplement une fonction pour effectuer un type d’E / S et lui transmettez une fonction de rappel. JavaScript crée automatiquement une fermeture en veillant à ce que l’état correct soit préservé même après que la fonction d’appel est hors de portée. Mais tout cela n’est que du jargon technique et je suis sûr que vous mourez d'envie de voir du code en action. Je vais avancer rapidement un peu à la fin de cette installation pour que nous puissions commencer à jouer avec notre tout nouvel exemplaire, tout neuf, de Node..
Donc, il semble que ma construction soit enfin terminée; Je veux vérifier rapidement et m'assurer que tout s'est bien passé avec l'installation. Pour cela, lancez simplement noeud --version
à partir de la ligne de commande, et vous devriez voir une indication que vous utilisez la dernière version de Node, qui est actuellement la version 0.4.5. Si vous voyez une version imprimée, vous pouvez être assuré que tout s'est bien passé et que vous êtes prêt à écrire votre première application Node. Alors, allons CD
de nouveau dans notre répertoire personnel et créez un nouveau dossier pour contenir tout notre travail au cours de cette série de screencasts. Ici, je vais simplement appeler le mienBlog
et CD
dans cela pour commencer.
Contrairement aux autres frameworks, Node n'est pas strictement destiné au développement Web. En fait, vous pouvez considérer Node comme un framework pour le développement de serveurs de toutes sortes. Avec Node, vous pouvez créer un serveur IRC, un serveur de discussion ou, comme nous le verrons dans cet ensemble de didacticiels, un serveur http. Donc, puisque nous ne pouvons pas avoir de tutoriel d’introduction sans l’obligatoire 'Bonjour le monde
'application, nous allons commencer par ça.
Créons un nouveau fichier appelé app.js
. Maintenant, Node est livré avec une poignée de bibliothèques pour faciliter le développement de serveurs basés sur des événements. Pour utiliser l'une des bibliothèques disponibles, vous devez simplement inclure son module à l'aide de la fonction require. La fonction require retournera un objet représentant le module que vous y passerez et vous pourrez capturer cet objet dans une variable. Cela crée effectivement un espace de noms pour la fonctionnalité de tout module requis. Pour la création d'un serveur HTTP, Node fournit la bibliothèque http. Alors allons-y et exigeons cela maintenant et assignons l'objet retourné à la variable http.
Ensuite, nous devrons créer notre serveur. La bibliothèque http fournit une fonction appelée createServer
qui prend une fonction de rappel et retourne un nouvel objet serveur.
La fonction de rappel est ce que le nœud appelle une fonction d'écoute. Il est appelé par le serveur chaque fois qu'une nouvelle demande arrive..
Chaque fois qu'une requête HTTP est effectuée, la fonction d'écoute est appelée et les objets représentant la requête HTTP et la réponse sont transmis à la fonction. Nous pouvons ensuite utiliser l'objet response à l'intérieur de notre fonction d'écoute pour renvoyer une réponse au navigateur. Pour ce faire, nous devons d’abord écrire les en-têtes HTTP appropriés, appelons donc le writeHead
fonction sur notre objet de réponse.
le writeHead
la fonction prend quelques arguments. La première est une valeur entière représentant le code d'état de la demande qui sera pour nous 200, autrement dit, OK. La deuxième valeur est un objet contenant tous les en-têtes de réponse que nous aimerions définir. Dans cet exemple, nous allons simplement définir le type de contenu sur 'text / plain' pour renvoyer le texte brut.
Une fois les en-têtes définis, nous pouvons envoyer les données. Pour ce faire, vous appelez le écrire
fonction et transmettez les données que vous souhaitez envoyer. Ici, appelons le écrire
fonction sur notre objet de réponse et passe dans la chaîne "Bonjour le monde
".
Pour envoyer la réponse, nous devons signaler au serveur que nous avons fini d'écrire le corps de notre réponse. nous pouvons le faire en appelant réponse.end
. le fin
Cette fonction nous permet également de transmettre des données. Nous pouvons donc raccourcir le code de notre serveur en éliminant l’appel à la fonction d’écriture que nous avons créé précédemment et en passant à la place de la chaîne "Bonjour le monde
"à la fonction de fin, comme si.
Maintenant que nous avons créé notre serveur, nous devons le configurer pour écouter les nouvelles demandes. C'est assez facile à faire: appelez la fonction listen sur notre objet serveur et transmettez-lui un numéro de port pour l'écouter; dans ce cas, je vais utiliser le port 8000
. La fonction d'écoute accepte également un deuxième paramètre facultatif, l'URL du nom d'hôte, mais comme nous ne l'exécutons que localement, nous pouvons ignorer ce paramètre pour le moment..
Enfin, imprimons un message pour nous informer que notre serveur est en cours d’exécution et sur quel port il écoute les nouvelles demandes. Vous pouvez le faire en appelant console.log
, comme nous le ferions dans le navigateur et en passant la chaîne "Écoute sur http://127.0.0.1:8000
". Nous y voilà, exécutons notre application en appelant node et en lui transmettant le nom du fichier que nous voulons exécuter..
Avant de clore ce premier article et cette première vidéo de la série, revenons au terminal et examinons rapidement le REPL de Node..
Un REPL, pour ceux qui ne connaissent pas l'acronyme, signifie Read-Eval-Print-Loop, qui n'est rien d'autre qu'un simple programme qui accepte les commandes, les évalue et affiche leurs résultats..
Il s’agit essentiellement d’une invite interactive qui vous permet de faire à peu près tout ce que vous pouvez faire avec un noeud classique, mais sans la charge supplémentaire liée à la création d’un fichier séparé. C’est un excellent moyen d’expérimenter. peu plus sur Node.
Nous devons d’abord arrêter notre application serveur en appuyant sur Ctrl-C
. Ensuite, exécutez à nouveau le noeud, cette fois, cependant, sans nom de fichier. L'exécution d'un noeud sans aucun argument fera apparaître le REPL, comme nous pouvons le voir ici par le changement de l'invite. Le REPL est très simple: vous pouvez en principe écrire du code JavaScript et voir l’évaluation de ce code. Malgré sa simplicité, le REPL dispose de peu de commandes pouvant être utiles. Vous pouvez les consulter en appelant la commande .help à l'invite. Ici (se référer à screencast), nous voyons une liste de quatre commandes, la première étant la .Pause
commander. Si vous écrivez un code qui s'étend sur plusieurs lignes et constatez que vous avez commis une erreur et que vous devez vous échapper pour une raison quelconque, .Pause
commande peut être utilisé pour le faire. Essayons maintenant?
Je vais créer une fonction ici et je vais l'appeler foo
et ouvrez le corps de la fonction, puis appuyez sur entrer
. Notez que sur la ligne suivante, plutôt que de voir le symbole plus grand que typique, nous voyons maintenant un ensemble de trois points, ou un ellipsis. C'est la manière dont Node nous indique que nous n'avons pas encore terminé la commande de la ligne précédente et que Node attend toujours plus de nous avant d'évaluer le code que nous avons saisi. Alors allons-y et ajoutons une ligne du code maintenant: nous ferons console.log
et nous allons imprimer le nom de la fonction. Frappons maintenant entrée, et, encore une fois, remarquons que le caractère des points de suspension est à nouveau affiché. Node s'attend toujours à ce que nous finissions la fonction à un moment donné. Supposons maintenant que j'ai commis une erreur et que je souhaite simplement revenir à une invite normale. Si, je continue d'appuyer sur Entrée, le nœud continue d'afficher le caractère des points de suspension. Mais si j'appelle le .Pause
commande, Node va nous sortir de la commande en cours et nous ramène à l'invite normale.
Ensuite, nous avons le .clair
commander. Celui-ci clarifiera notre contexte actuel. Donc, si vous avez encombré l’environnement avec la création de plusieurs variables et fonctions et que vous voulez une table rase, lancez simplement le .clair
commande et voilà, tout disparaît comme par magie.
.sortie
et .Aidez-moi
Enfin, il y a la .sortie
et .Aidez-moi
commandes. le .Aidez-moi
La commande est assez évidente, puisque c'est la commande que nous avions l'habitude de voir la liste des commandes. le .sortie
La commande est également évidente: vous l’appelez simplement pour quitter le REPL, comme si.
Donc, cela couvre à peu près toutes les fonctionnalités que le REPL fournit en dehors de l'évaluation du code que vous entrez. Mais avant de quitter complètement le REPL, j'aimerais saisir cette occasion pour aborder certaines différences et similitudes entre JavaScript dans le navigateur et la version JavaScript de Node. Alors relançons Node et sautons dans le REPL.
La première différence entre JavaScript et le noeud Node réside dans le fait que, dans le navigateur, toute fonction ou variable créée en dehors d'une fonction ou d'un objet est liée à la portée globale et disponible partout. Dans Node cependant, ce n'est pas vrai. Chaque fichier, et même le REPL, a sa propre étendue de niveau de module à laquelle appartiennent toutes les déclarations globales. Nous verrons cela plus tard dans la série lorsque nous discuterons de modules et en créerons quelques-uns. Mais pour l'instant, vous pouvez voir l'objet de module réel pour le REPL en tapant module à l'invite. Notez qu’il existe un attribut prompt enfoui à quelques niveaux dans notre objet module? Ceci contrôle l'invite que nous voyons quand dans le REPL. Changeons cela en quelque chose de légèrement différent et voyons ce qui se passe. Là maintenant, nous avons une nouvelle invite.
Une autre différence entre JavaScript et le noeud JavaScript du navigateur réside dans le fait que, dans le navigateur, vous disposez d'un objet de fenêtre global qui vous lie essentiellement à l'environnement du navigateur..
Dans Node, il n’existe pas de navigateur et, par conséquent, il n’existe aucune la fenêtre
objet. Node a toutefois une contrepartie qui vous connecte à l'environnement d'exploitation qui est l'objet processus que nous pouvons voir en tapant simplement processus dans le REPL. Vous trouverez ici plusieurs fonctions et informations utiles telles que la liste des variables d'environnement..
Une similitude qu'il est important de mentionner ici est la fonction setTimeout. Si vous connaissez le langage JavaScript côté client, vous avez sans doute utilisé cette fonction une ou deux fois. Cela vous permet de configurer une fonction à appeler ultérieurement. Allons-y et essayons maintenant.
> fonction sayBonjour (secondes) ? console.log ('Hello') ;? setTimeout (function () ? console.log ('World') ;?, secondes * 1000) ;?
Cela créera une fonction qui, une fois appelée, affichera la chaîne 'Hello', puis quelques secondes plus tard, la chaîne 'World'. Exécutons maintenant la fonction pour la voir en action.
> dites bonjour (2);
Il y a quelques idées importantes à prendre en compte ici. Tout d’abord, Ryan Dahl, le créateur de Node, a fait de son mieux pour rendre l’environnement aussi familier que possible à quiconque possédant une expérience JavaScript côté client. Donc, l'utilisation de noms tels que setTimeout
et setInterval plutôt que de dormir et de répéter, par exemple, était une décision consciente de faire correspondre l'environnement côté serveur, chaque fois que cela se justifiait, l'environnement du navigateur.
Le deuxième concept que je veux que vous connaissiez est le plus important. Notez que lorsque nous appelons dis bonjour
, juste après avoir imprimé la première chaîne, le contrôle est immédiatement rendu au REPL. Entre le moment où la première chaîne est imprimée et la fonction de rappel exécutée, vous pouvez continuer à faire tout ce que vous voulez à l'invite de la réplique. Cela est dû à la nature de Node basée sur les événements. Dans Node, il est presque impossible d'appeler une fonction qui se bloque pour une raison quelconque, ce qui est vrai pour la fonction setTimeout. Permet d'appeler notre dis bonjour
fonctionner à nouveau, cependant, cette fois, passons dans un intervalle de temps légèrement plus long pour nous donner assez de temps pour jouer un peu et prouver notre point. Je crois que 10 secondes devraient faire l'affaire.
Là nous voyons la première chaîne. Allons-y et exécutons notre propre code, que diriez-vous de 2 + 2
. Génial, on voit que la réponse est 4
et? il y a notre deuxième chaîne en cours d'impression maintenant.
Cela nous amène donc à la fin du premier épisode de cette série. J'espère que ceci a été une introduction assez informative à Node pour vous et j'espère avoir assez bien expliqué pourquoi c'est si excitant, ce qu'il a à offrir et à quel point il est amusant et simple à utiliser. Dans le prochain épisode, nous commencerons à écrire du code pour notre moteur de blog; J'espère donc que vous vous retrouverez tous à nouveau lorsque tout ira un peu plus vite. À plus tard!