TutorialsPoint Node - js-1-45 FR
TutorialsPoint Node - js-1-45 FR
À propos du didacticiel
Node.js est une plateforme/un cadre très puissant basé sur JavaScript et construit sur le
moteur JavaScript V8 de Google Chrome. Il est utilisé pour développer des applications web
à forte intensité d'E/S, comme les sites de streaming vidéo, les applications à page unique et
d'autres applications web. Node.js est open source, entièrement gratuit et utilisé par des
milliers de développeurs dans le monde.
Audience
Ce tutoriel est conçu pour les programmeurs de logiciels qui veulent apprendre les bases de
Node.js et ses concepts architecturaux. Ce tutoriel vous donnera une compréhension
suffisante de tous les composants nécessaires de Node.js avec des exemples appropriés.
Conditions préalables
Avant de commencer ce tutoriel, vous devez avoir des connaissances de base en JavaScript.
Comme nous allons développer des applications web à l'aide de Node.js, il serait bon que
vous ayez une certaine connaissance des autres technologies web telles que HTML, CSS,
AJAX, etc.
Essayez l'exemple suivant en utilisant l'option "Essayez" disponible dans le coin supérieur
droit de la boîte de code d'exemple ci-dessous (sur notre site web) :
Tous les contenus et graphiques publiés dans ce livre électronique sont la propriété de
Tutorials Point (I) Pvt. Ltd. Il est interdit à l'utilisateur de ce livre électronique de
réutiliser, conserver, copier, distribuer ou republier tout ou partie du contenu de ce livre
électronique de quelque manière que ce soit sans l'accord écrit de l'éditeur.
Nous nous efforçons de mettre à jour le contenu de notre site Web et de nos didacticiels
aussi rapidement et précisément que possible, mais le contenu peut contenir des
inexactitudes ou des erreurs. Tutorials Point (I) Pvt. Ltd. ne donne aucune garantie quant
à l'exactitude, l'actualité ou l'exhaustivité de notre site web ou de son contenu, y
compris ce tutoriel. Si vous découvrez des erreurs sur notre site Web ou dans ce tutoriel,
veuillez nous en informer à l'adresse contact@tutorialspoint.com.
i
Node.js
1. Introduction.............................................................................................................................................1
Qu'est-ce que Node.js ? ...................................................................................................................................1
Caractéristiques de Node.js .............................................................................................................................1
Qui utilise Node.js ?..........................................................................................................................................2
Concepts...........................................................................................................................................................2
Où utiliser Node.js ? .........................................................................................................................................2
Où ne pas utiliser Node.js ?..............................................................................................................................2
3. Première application................................................................................................................................6
Création d'une application Node.js ..................................................................................................................6
5. NPM.......................................................................................................................................................12
Installer des modules avec NPM ....................................................................................................................12
Installation globale ou locale..........................................................................................................................12
Utilisation de package.json.............................................................................................................................14
Attributs de Package.json...............................................................................................................................19
Désinstallation d'un module ..........................................................................................................................19
Mise à jour d'un module ................................................................................................................................19
Rechercher un module...................................................................................................................................19
Créer un module ............................................................................................................................................19
ii
Node.js
7. Boucle événementielle ...........................................................................................................................23
Programmation événementielle .....................................................................................................................23
Exemple..........................................................................................................................................................24
Comment fonctionnent les applications Node ?.............................................................................................25
9. Tampons ................................................................................................................................................30
Création de tampons ......................................................................................................................................30
Écriture dans les tampons..............................................................................................................................30
Lecture des tampons......................................................................................................................................31
Convertir un tampon en JSON........................................................................................................................32
Concaténer des tampons................................................................................................................................33
Comparer les tampons ...................................................................................................................................33
Tampon de copie............................................................................................................................................34
Tampon à tranches.........................................................................................................................................35
Longueur de la mémoire tampon...................................................................................................................36
Méthodes Référence......................................................................................................................................36
Méthodes de classe........................................................................................................................................41
iii
Node.js
Objet de la console .........................................................................................................................................72
Objet du processus.........................................................................................................................................74
iv
1. Introduction Node.js
Node.js est une plateforme basée sur le moteur d'exécution JavaScript de Chrome,
qui permet de créer facilement des applications réseau rapides et évolutives.
Node.js utilise un modèle d'E/S événementiel et non bloquant qui le rend léger et
efficace, parfait pour les applications en temps réel à forte intensité de données qui
s'exécutent sur des appareils distribués.
Node.js fournit également une riche bibliothèque de divers modules JavaScript, ce qui
simplifie considérablement le développement d'applications web à l'aide de Node.js.
Caractéristiques de Node.js
Voici quelques-unes des caractéristiques importantes qui font de Node.js le premier choix
des architectes de logiciels.
• Simple thread mais hautement évolutif - Node.js utilise un modèle simple thread
avec une boucle d'événements. Le mécanisme des événements permet au
serveur de répondre de manière non bloquante et le rend hautement évolutif,
contrairement aux serveurs traditionnels qui créent un nombre limité de threads
pour traiter les demandes. Node.js utilise un programme à thread unique et ce
même programme peut répondre à un nombre beaucoup plus important de
demandes que les serveurs traditionnels tels que le serveur HTTP Apache.
1
données en mémoire tampon. Elles émettent simplement les données par
morceaux.
2
Node.js
Concepts
Le diagramme suivant décrit certaines parties importantes de Node.js que nous aborderons
en détail dans les chapitres suivants.
Où utiliser Node.js ?
Voici les domaines dans lesquels Node.js s'avère être un partenaire technologique idéal.
3
2. Configuration de l'environnement Node.js
Essayez l'exemple suivant en utilisant l'option "Essayez" disponible dans le coin supérieur
droit de la boîte de code d'exemple ci-dessous (sur notre site web) :
Pour la plupart des exemples donnés dans ce tutoriel, vous trouverez une option Essayer,
alors utilisez-la et profitez de votre apprentissage.
Éditeur de texte
Vous devez disposer d'un éditeur de texte pour taper votre programme. Voici quelques
exemples d'éditeurs de texte : Windows Notepad, OS Edit command, Brief, Epsilon,
EMACS, vim ou vi.
Le nom et la version des éditeurs de texte peuvent varier d'un système d'exploitation à
l'autre. Par exemple, Notepad sera utilisé sous Windows, et vim ou vi peuvent être utilisés
sous Windows ainsi que sous Linux ou UNIX.
Les fichiers que vous créez avec votre éditeur sont appelés fichiers source et contiennent le
code source du programme. Les fichiers source des programmes Node.js sont généralement
nommés avec l'extension ".js".
Avant de commencer à programmer, assurez-vous que vous disposez d'un éditeur de texte
et que vous avez suffisamment d'expérience dans la manière d'écrire un programme
informatique, de l'enregistrer dans un fichier et enfin de l'exécuter.
La distribution Node.js se présente sous la forme d'un binaire installable pour les
4
systèmes d'exploitation SunOS, Linux, Mac OS X et Windows dotés d'architectures de
processeurs x86 32 bits (386) et 64 bits (amd64).
5
Node.js
La section suivante explique comment installer la distribution binaire de Node.js sur différents systèmes
d'exploitation.
OS Nom de
l'archive
Fenêtres node-v6.3.1-x64.msi
Linux node-v6.3.1-linux-x86.tar.gz
Mac node-v6.3.1-darwin-x86.tar.gz
SunOS node-v6.3.1-sunos-x86.tar.gz
$ cd /tmp
$ wget http://nodejs.org/dist/v6.3.1/node-v6.3.1-linux-x64.tar.gz
tar xvfz node-v6.3.1-linux-x64.tar.gz
$ mkdir -p /usr/local/nodejs
$ mv node-v6.3.1-linux-x64/* /usr/local/nodejs
Ajoutez /usr/local/nodejs/bin à la variable d'environnement PATH.
OS Sortie
7
Node.js
$ node main.js
Si tout se passe bien, votre installation devrait donner le résultat suivant :
Bonjour à tous !
8
3. Première application Node.js
Avant de créer une application "Hello, World !" à l'aide de Node.js, voyons les composants
d'une application Node.js. Une application Node.js se compose des trois éléments
importants suivants :
1. Importer les modules requis : Nous utilisons la directive require pour charger les
modules Node.js.
2. Créer un serveur : Un serveur qui écoutera les requêtes des clients, comme le
serveur HTTP Apache.
9
Node.js
$ node main.js
Vérifiez la sortie. Le serveur a démarré.
1
0
Node.js
Félicitations, vous avez votre premier serveur HTTP opérationnel qui répond à toutes les
requêtes HTTP sur le port 8081.
1
1
4. Terminal REPL Node.js
REPL signifie Read Eval Print Loop et représente un environnement informatique tel qu'une
console Windows ou un shell Unix/Linux où une commande est entrée et le système répond
avec une sortie dans un mode interactif. Node.js ou Node est livré avec un environnement
REPL. Il effectue les tâches suivantes :
● Read - Lit les données saisies par l'utilisateur, les analyse en structure de
données JavaScript et les stocke en mémoire.
● Loop - La commande ci-dessus est exécutée en boucle jusqu'à ce que l'utilisateur appuie deux
fois sur ctrl-c.
La fonction REPL de Node est très utile pour expérimenter les codes Node.js et pour
déboguer les codes JavaScript.
Démarrage du REPL
La REPL peut être lancée en exécutant simplement node dans le shell/console sans aucun
argument, comme suit.
Nœud de dollars
Vous verrez l'invite de commande REPL > où vous pouvez taper n'importe quelle commande Node.js :
Nœud de dollars
>
Expression simple
Essayons une simple mathématique à l'invite de commande de Node.js REPL :
Nœud de dollars
>1+3
4
>1+( 2* 3) - 4
3
1
2
Node.js
>
Nœud de dollars
> x = 10 10
> var y = 10
undefined
> x+y
20
> console.log("Hello World")
Hello Workd
undefined
Expression multiligne
Node REPL prend en charge les expressions multilignes comme en JavaScript. Voyons la
boucle do-while suivante en action :
Nœud de dollars
> var x = 0
undefined
> faire {
... x++ ;
... console.log("x : " + x) ;
... } while ( x < 5 ) ;
x:1
x:2
x:3
x:4
x:5
indéfini
>
... vient automatiquement lorsque vous appuyez sur Entrée après la parenthèse ouvrante.
Node vérifie automatiquement la continuité des expressions.
13
Node.js
Variable de soulignement
Vous pouvez utiliser le trait de soulignement (_) pour obtenir le dernier résultat :
Nœud de dollars
> var x = 10
undefined
> var y = 20
indéfini
> x+y
30
> var sum = _
undefined
> console.log(sum)
30
indéfini
>
Commandes REPL
• ctrl + c - termine la commande en cours.
• ctrl + c deux fois - terminer le Node REPL.
• ctrl + d - terminer le Node REPL.
• Touches haut/bas - pour consulter l'historique des commandes et modifier les commandes
précédentes.
• tab Keys - liste des commandes en cours.
• .help - liste de toutes les commandes.
• .break - sortie d'une expression multiligne.
• .clear - sort d'une expression multiligne.
• .save filename - enregistre la session Node REPL en cours dans un fichier.
• .load filename - charge le contenu du fichier dans la session Node REPL en cours.
Arrêt de REPL
Comme mentionné ci-dessus, vous devrez utiliser ctrl-c deux fois pour sortir du Node.js REPL.
Nœud de dollars
>
14
5. MNP Node.js
• Dépôts en ligne pour les paquets/modules node.js qui peuvent être recherchés sur
search.nodejs.org
• Utilitaire en ligne de commande pour installer les paquets Node.js, gérer les versions
et les dépendances des paquets Node.js.
NPM est fourni avec les installables Node.js après la version v0.6.3. Pour le vérifier, ouvrez la
console et tapez la commande suivante pour voir le résultat :
Si vous utilisez une ancienne version de NPM, il est très facile de la mettre à jour. Il suffit
d'utiliser la commande suivante à partir de la racine :
15
Node.js
$ ls -l
total 0
drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules
Vous pouvez également utiliser la commande npm ls pour obtenir la liste de tous les modules installés
localement.
express@4.12.2 /usr/lib/node_modules/express
├── merge-descriptors@1.0.0
├── utils-merge@1.0.0
├── cookie-signature@1.0.6
├── methods@1.1.1
├── fresh@0.2.4
├── cookie@0.1.2
├── escape-html@1.0.1
├── range-parser@1.0.2
├── content-type@1.0.1
├── finalhandler@0.3.3
├── vary@1.0.0
├── parseurl@1.3.0
├── content-disposition@0.5.0
├── path-to-regexp@0.1.3
├── depd@1.0.0
├── qs@2.3.3
├── on-finished@2.2.0 (ee-first@1.1.0)
├── etag@1.5.1 (crc@3.2.1)
├── debug@2.1.3 (ms@0.7.0)
├── proxy-addr@1.0.7 (forwarded@0.1.0, ipaddr.js@0.1.9)
├ ─ ─ s e n d @ 0 . 1 2 . 1 ( d e s t r o y @ 1 . 0 . 3 , m s @ 0 . 7 . 0 , mime@1.3.4)
├── serve-static@1.9.2 (send@0.12.2)
├── accepts@1.2.5 (negotiator@0.5.1, mime-
types@2.0.10)
└── type-is@1.6.1 (media-typer@0.3.0, mime- 16
types@2.0.10)
Node.js
Vous pouvez utiliser la commande suivante pour vérifier tous les modules installés globalement :
$ npm ls -g
Utilisation de package.json
Le fichier package.json est présent dans le répertoire racine de toute application/module
Node et est utilisé pour définir les propriétés d'un paquet. Ouvrons le package.json du
package express présent dans node_modules/express/
{
"nom" : "express",
"description" : "Fast, unopinionated, minimalist web
framework", "version" : "4.11.2",
"auteur" : {
"name" : "TJ Holowaychuk",
"email" : "tj@vision-
media.ca"
},
"contributeurs" : [
{
"nom" : "Aaron Heckmann",
"email" : "aaron.heckmann+github@gmail.com"
},
{
"name" : "Ciaran Jessup",
"email" :
"ciaranj@gmail.com"
},
{
"name" : "Douglas Christopher
Wilson", "email" :
"doug@somethingdoug.com"
},
{
"name" : "Guillermo Rauch",
"email" :
"rauchg@gmail.com"
},
{
"name" : "Jonathan Ong", 17
"email" :
"me@jongleberry.com"
},
Node.js
{
"nom" : "Roman Shtylman",
"email" : "shtylman+expressjs@gmail.com"
},
{
"name" : "Young Jae Sim",
"email" :
"hanul@hanul.me"
}
],
"licence" : "MIT", "repository"
: {
"type" : "git",
"url" : "https://github.com/strongloop/express"
},
"homepage" : "http://expressjs.com/",
"keywords" : [
"express",
"framework",
"sinatra", "web",
"rest",
"restful"
, "router",
"app",
"ap
i"
],
"dependencies" :
{"accepts" : "~1.2.3",
"content-disposition" : "0.5.0",
"cookie-signature" : "1.0.5",
"debug" : "~2.1.1",
"depd" : "~1.0.0",
"escape-html" : "1.0.1",
"etag" : "~1.5.1",
"finalhandler" : "0.3.3",
"fresh" : "0.2.4",
18
Node.js
"media-typer" : "0.3.0",
19
Node.js
"methods" : "~1.1.1",
"on-finished" : "~2.2.0",
"parseurl" : "~1.3.0",
"path-to-regexp" : "0.1.3",
"proxy-addr" : "~1.0.6",
"qs" : "2.3.3",
"range-parser" : "~1.0.2",
"send" : "0.11.1",
"serve-static" : "~1.8.1",
"type-is" : "~1.5.6",
"vary" : "~1.0.0",
"cookie" : "0.1.2",
"merge-descriptors" : "0.0.2",
"utils-merge" : "1.0.0"
},
"devDependencies" : {
"after" : "0.8.1",
"ejs" : "2.1.4",
"istanbul" : "0.3.5",
"marqué" : "0.3.3",
"mocha" : "~2.1.0",
"devrait" : "~4.6.2",
"supertest" : "~0.15.0",
"hjs" : "~0.0.6",
"body-parser" : "~1.11.0",
"connect-redis" : "~2.2.0",
"cookie-parser" : "~1.3.3",
"express-session" : "~1.10.2",
"jade" : "~1.9.1",
"method-override" : "~2.3.1",
"morgan" : "~1.5.1",
"multiparty" : "~4.1.1",
"vhost" : "~3.0.0"
},
"moteurs" : {
"node" : ">= 0.10.0"
},
16
Node.js
"fichiers" :
["LICENSE",
"History.md",
"Readme.md",
"index.js",
"lib/"
],
"scripts" : {
"test" : "mocha --require test/support/env --reporter spec --bail -
check-leaks test/ test/acceptance/",
18
Node.js
"email" : "tj@vision-media.ca"
},
{
"nom" : "jongleberry",
"email" : "jonathanrichardong@gmail.com"
},
{
"nom" : "shtylman",
"email" : "shtylman@gmail.com"
},
{
"nom" : "dougwilson",
"email" : "doug@somethingdoug.com"
},
{
"nom" : "aredridel",
"email" : "aredridel@nbtsc.org"
},
{
"nom" : "strongloop",
"email" : "callback@strongloop.com"
},
{
"nom" : "rfeng",
"email" : "enjoyjava@gmail.com"
}
],
"dist" : {
"shasum" : "8df3d5a9ac848585f00a0777601823faecd3b148",
"tarball" : "http://registry.npmjs.org/express/-/express-4.11.2.tgz"
},
"répertoires" : {},
"_resolved" : "https://registry.npmjs.org/express/-/express-4.11.2.tgz",
"readme" : "ERROR : No README data found !"
}
19
Node.js
Attributs de Package.json
• name - nom du paquet
• mots-clés - mots-clés
$ npm ls
Rechercher un module
Rechercher un nom de paquet à l'aide de NPM.
Créer un module
La création d'un module nécessite la génération du fichier package.json. Générons le
package.json en utilisant NPM, qui va générer le squelette de base du package.json.
20
Node.js
$ npm init
Cet utilitaire vous guidera dans la création d'un fichier package.json.
Il ne couvre que les éléments les plus courants et tente de deviner des
valeurs par défaut raisonnables.
Voir 'npm help json' pour une documentation définitive sur ces
champs et ce qu'ils font exactement.
Vous devrez fournir toutes les informations nécessaires sur votre module. Vous pouvez vous
aider du fichier package.json mentionné ci-dessus pour comprendre la signification des
différentes informations demandées. Une fois le fichier package.json généré, utilisez la
commande suivante pour vous enregistrer sur le site du dépôt NPM en utilisant une adresse
email valide.
$ npm publish
Si tout va bien avec votre module, alors il sera publié dans le dépôt et sera accessible à
l'installation en utilisant NPM comme n'importe quel autre module Node.js.
21
6. Concept de rappel Node.js
Par exemple, une fonction de lecture d'un fichier peut commencer à lire un fichier et
renvoyer immédiatement le contrôle à l'environnement d'exécution afin que l'instruction
suivante puisse être exécutée. Une fois l'E/S de fichier terminée, elle appellera la fonction
de rappel en lui transmettant le contenu du fichier en tant que paramètre. Il n'y a donc pas
de blocage ou d'attente pour l'E/S de fichier. Cela rend Node.js très évolutif, car il peut
traiter un grand nombre de demandes sans attendre qu'une fonction renvoie des résultats.
var fs = require("fs") ;
console.log(data.toString()) ;
console.log("Programme terminé") ;
$ node main.js
Vérifier la sortie.
22
Node.js
var fs = require("fs") ;
console.log("Programme terminé") ;
Exécutez maintenant le fichier main.js pour voir le résultat :
$ node main.js
Vérifier la sortie.
Programme terminé
Tutorials Point propose des contenus d'auto-
apprentissage pour enseigner le monde de
manière simple et facile !!!!!
23
7. Boucle d'événements Node.js
Node.js est une application monotâche, mais elle peut prendre en charge la concurrence
grâce au concept d'événements et de rappels. Chaque API de Node.js est asynchrone et,
étant donné qu'il s'agit d'une application monotâche, elle utilise des appels de fonction
asynchrones pour maintenir la simultanéité. Node utilise un modèle d'observateur. Le
thread Node maintient une boucle d'événements et chaque fois qu'une tâche est terminée,
il déclenche l'événement correspondant qui signale à la fonction d'écoute d'événements de
s'exécuter.
Programmation événementielle
Node.js utilise fortement les événements et c'est aussi l'une des raisons pour lesquelles
Node.js est assez rapide par rapport à d'autres technologies similaires. Dès que Node
démarre son serveur, il initie simplement ses variables, déclare des fonctions, puis attend
simplement que l'événement se produise.
Dans une application pilotée par les événements, il y a généralement une boucle principale
qui écoute les événements, puis déclenche une fonction de rappel lorsque l'un de ces
événements est détecté.
Bien que les événements ressemblent beaucoup aux rappels, la différence réside dans le fait
que les fonctions de rappel sont appelées lorsqu'une fonction asynchrone renvoie son
résultat, alors que la gestion des événements fonctionne sur le modèle de l'observateur. Les
fonctions qui écoutent les événements agissent en tant qu'observateurs. Chaque fois qu'un
événement est déclenché, la fonction qui l'écoute commence à s'exécuter. Node.js dispose
de plusieurs événements intégrés, disponibles via le module events et la classe
EventEmitter, qui sont utilisés pour lier les événements et les auditeurs d'événements de la
manière suivante :
// Déclenche un événement
eventEmitter.emit('eventName') ;
Exemple
Créez un fichier js nommé main.js avec le code suivant :
console.log("Programme terminé.") ;
mnode main.js
connexion réussie.
données reçues avec
succès. Programme terminé.
var fs = require("fs") ;
Programme terminé
Tutorials Point propose des contenus d'auto-
apprentissage pour enseigner le monde de
manière simple et facile !!!!!
26
8. Émetteur d'événements Node.js
De nombreux objets d'un nœud émettent des événements, par exemple, un net.Server
émet un événement chaque fois qu'un pair se connecte à lui, un fs.readStream émet un
événement lorsque le fichier est ouvert. Tous les objets qui émettent des événements sont
des instances de events.EventEmitter.
Classe EventEmitter
Comme nous l'avons vu dans la section précédente, la classe EventEmitter se trouve dans le
module events. Elle est accessible via le code suivant :
EventEmitter fournit plusieurs propriétés telles que on et emit. La propriété on est utilisée
pour lier une fonction à l'événement et emit est utilisée pour déclencher un événement.
Méthodes
S.No. Méthode et
description
addListener(event, listener)
Ajoute un écouteur à la fin du tableau des écouteurs pour l'événement
1 spécifié. Aucune vérification n'est effectuée pour savoir si l'écouteur a déjà été
ajouté. Plusieurs appels passant la même combinaison d'événement et
d'écouteur se traduiront par l'ajout de l'écouteur plusieurs fois. Retourne
l'émetteur, ce qui permet d'enchaîner les appels.
on(event, listener)
Ajoute un écouteur à la fin du tableau des écouteurs pour l'événement
2 spécifié. Aucune vérification n'est effectuée pour savoir si l'écouteur a déjà été
ajouté. Plusieurs appels passant la même combinaison d'événement et
d'écouteur se traduiront par l'ajout de l'écouteur plusieurs fois. Retourne
l'émetteur, ce qui permet d'enchaîner les appels.
27
once(event, listener)
28
Node.js
removeListener(event, listener)
removeAllListeners([event])
Supprime tous les listeners, ou ceux de l'événement spécifié. Ce n'est pas une
5 bonne idée de supprimer des auditeurs qui ont été ajoutés ailleurs dans le
code, en particulier lorsqu'il s'agit d'un émetteur que vous n'avez pas créé (par
exemple, des sockets ou des flux de fichiers). Retourne l'émetteur, ce qui
permet d'enchaîner les appels.
setMaxListeners(n)
Par défaut, EventEmitters affiche un avertissement si plus de 10 auditeurs sont
6 ajoutés pour un événement particulier. Il s'agit d'une valeur par défaut utile qui
permet de détecter les fuites de mémoire. Il est évident que tous les Emitters ne
doivent pas être limités à 10. Cette fonction permet d'augmenter cette limite.
Elle est fixée à zéro pour un nombre illimité d'émetteurs.
listeners(event)
7
Renvoie un tableau d'auditeurs pour l'événement spécifié.
Méthodes de classe
S.No. Méthode et
description
1 listenerCount(emitter, event)
Renvoie le nombre d'auditeurs pour un événement donné.
29
Node.js
Evénements
S. Non. Événements et
description
newListener
Cet événement est émis chaque fois qu'un auditeur est ajouté. Lorsque cet
événement est déclenché, il se peut que l'auditeur n'ait pas encore été
ajouté au tableau des auditeurs de l'événement.
removeListener
Exemple
Créez un fichier js nommé main.js avec le code Node.js suivant :
// auditeur #1
varner1 = function listner1() { console.log('listner1 executed.')
;
}
// auditeur #2
varner2 = function listner2() { console.log('listner2 executed.') ;
}
30
Node.js
var eventListeners =
require('events').EventEmitter.listenerCount(eventEmitter,'connection') ;
console.log(eventListeners + " Listner(s) listening to connection event") ;
eventListeners =
require('events').EventEmitter.listenerCount(eventEmitte
r,'connection') ;
console.log(eventListeners + " Listner(s) listening to connection event") ;
console.log("Programme terminé.") ;
Exécutez maintenant le fichier main.js pour voir le résultat :
$ node main.js
Vérifier la sortie.
31
9. Tampons Node.js
Le JavaScript pur est compatible avec l'Unicode, mais ce n'est pas le cas pour les données
binaires. Lorsque l'on traite des flux TCP ou du système de fichiers, il est nécessaire de gérer
des flux d'octets. Node propose la classe Buffer qui fournit des instances pour stocker des
données brutes similaires à un tableau d'entiers, mais qui correspond à une allocation de
mémoire brute en dehors du tas V8.
La classe tampon est une classe globale à laquelle on peut accéder dans une application sans
importer le module tampon.
Création de tampons
La mémoire tampon des nœuds peut être construite de différentes manières.
Méthode 1
La syntaxe suivante permet de créer un tampon non initié de 10 octets :
Méthode 2
La syntaxe suivante permet de créer un tampon à partir d'un tableau donné :
Méthode 3
La syntaxe suivante permet de créer un tampon à partir d'une chaîne de caractères donnée et d'un type
d'encodage facultatif :
Syntaxe
Voici la syntaxe de la méthode permettant d'écrire dans un tampon de nœud :
32
Node.js
Paramètres
Voici la description des paramètres utilisés :
Valeur de retour
Cette méthode renvoie le nombre d'octets écrits. S'il n'y a pas assez d'espace dans le
tampon pour contenir toute la chaîne, une partie de la chaîne sera écrite.
Exemple
buf = nouveau Buffer(256) ;
len = buf.write("Apprentissage simple et facile") ;
Octets écrits : 20
Syntaxe
Voici la syntaxe de la méthode permettant de lire les données d'un tampon de nœud :
Paramètres
Voici la description des paramètres utilisés :
Valeur de retour
Cette méthode décode et renvoie une chaîne de caractères à partir des données de la
mémoire tampon encodées à l'aide de l'encodage du jeu de caractères spécifié.
33
Node.js
Exemple
buf = nouveau Buffer(26) ;
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97 ;
}
console.log( buf.toString('ascii')) ;
// outputs : abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5)) ;
// sorties : abcde
console.log( buf.toString('utf8',0,5)) ;
// sorties : abcde
console.log( buf.toString(undefined,0,5)) ;
// l'encodage est par défaut "utf8", ce qui donne abcde
Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant :
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde
Syntaxe
Voici la syntaxe de la méthode permettant de convertir un tampon de nœud en objet JSON :
buf.toJSON()
Valeur de retour
Cette méthode renvoie une représentation JSON de l'instance de tampon.
Exemple
var buf = new Buffer('Simply Easy Learning') ; var
json = buf.toJSON(buf) ;
console.log(json) ;
Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant :
34
Node.js
[ 83, 105, 109, 112, 108, 121, 32, 69, 97, 115, 121, 32, 76, 101, 97, 114, 110,
105, 110, 103 ]
Syntaxe
Voici la syntaxe de la méthode permettant de concaténer des tampons de nœuds en un seul tampon de
nœud :
Buffer.concat(list[, totalLength])
Paramètres
Voici la description des paramètres utilisés :
Valeur de retour
Cette méthode renvoie une instance de tampon.
Exemple
var buffer1 = new Buffer('TutorialsPoint ') ;
var buffer2 = new Buffer('Simply Easy Learning') ;
var buffer3 = Buffer.concat([buffer1,buffer2]) ;
console.log("buffer3 content : " + buffer3.toString()) ;
Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant :
Syntaxe
Voici la syntaxe de la méthode permettant de comparer deux tampons de nœuds :
buf.compare(otherBuffer) ;
Paramètres
Voici la description des paramètres utilisés :
35
Node.js
Valeur de retour
Renvoie un nombre indiquant s'il vient avant ou après ou s'il est identique à l'autre tampon
dans l'ordre de tri.
Exemple
var buffer1 = new Buffer('ABC') ;
var buffer2 = new Buffer('ABCD') ;
var result = buffer1.compare(buffer2) ;
if(result < 0) {
console.log(buffer1 +" comes before " + buffer2) ;
}else if(result == 0){
console.log(buffer1 +" is same as " + buffer2) ;
}else {
console.log(buffer1 +" vient après " + buffer2) ;
}
Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant :
Tampon de copie
Syntaxe
Voici la syntaxe de la méthode de copie d'un tampon de nœud :
Paramètres
Voici la description des paramètres utilisés :
36
Node.js
Valeur de retour
Pas de valeur de retour. Copie les données d'une région de ce tampon vers une région du
tampon cible, même si la région de mémoire cible chevauche la source. S'ils ne sont pas
définis, les paramètres targetStart et sourceStart prennent par défaut la valeur 0, tandis que
sourceEnd prend par défaut la valeur buffer.length.
Exemple
var buffer1 = new Buffer('ABC') ;
//copier un tampon
var buffer2 = new Buffer(3) ;
buffer1.copy(buffer2) ;
console.log("buffer2 content : " + buffer2.toString()) ;
Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant :
Tampon de tranche
Syntaxe
Voici la syntaxe de la méthode permettant d'obtenir un sous-buffer d'un tampon de nœud :
buf.slice([start][, end])
Paramètres
Voici la description des paramètres utilisés :
Valeur de retour
Renvoie un nouveau tampon qui référence la même mémoire que l'ancien, mais décalé et
recadré par les indices de début (0 par défaut) et de fin (longueur du tampon par défaut).
Les indices négatifs commencent à la fin du tampon.
Exemple
var buffer1 = new Buffer('TutorialsPoint') ;
/découpage d'un tampon
var buffer2 = buffer1.slice(0,9) ; console.log("buffer2
content : " + buffer2.toString()) ;
37
Node.js
Longueur du tampon
Syntaxe
Voici la syntaxe de la méthode permettant d'obtenir la taille d'un tampon de nœud en octets :
buf.length ;
Valeur de retour
Renvoie la taille d'un tampon en octets.
Exemple
var buffer = new Buffer('TutorialsPoint') ;
//longueur de la mémoire tampon
console.log("buffer length : " + buffer.length) ;
Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant :
longueur du tampon : 14
Méthodes Référence
Voici une référence du module Buffers disponible dans Node.js. Pour plus de détails, vous
pouvez vous référer à la documentation officielle.
S. Méthode et
Non. description
nouveau tampon (taille)
1 Alloue une nouvelle mémoire tampon de taille octets. Notez que la taille ne doit
pas être supérieure à kMaxLength. Dans le cas contraire, une erreur de type
RangeError sera générée.
nouveau Buffer(buffer)
2
Copie les données du tampon transmis dans une nouvelle instance de tampon.
38
Node.js
39
Node.js
buf.toJSON()
15 Renvoie une représentation JSON de l'instance de tampon. JSON.stringify
appelle implicitement cette fonction lors de la stringification d'une instance
de Buffer.
40
Node.js
buf[index]
16 Obtenir et définir l'octet à l'index. Les valeurs se rapportent à des octets
individuels, de sorte que la plage légale est comprise entre 0x00 et 0xFF hex ou
0 et 255.
buf.equals(otherBuffer)
17
Renvoie un booléen si ce tampon et l'autre tampon ont les mêmes octets.
buf.compare(otherBuffer)
18 Renvoie un nombre indiquant si ce tampon vient avant ou après ou est
identique à l'autre tampon dans l'ordre de tri.
buf.slice([start][, end])
Renvoie un nouveau tampon qui référence la même mémoire que l'ancien,
20
mais décalé et recadré par les index de début (par défaut 0) et de fin (par
défaut longueur du tampon). Les indices négatifs commencent à la fin du
tampon.
buf.readUInt8(offset[, noAssert])
Lit un entier 8 bits non signé dans le tampon au niveau du décalage spécifié.
21
Définissez noAssert à true pour ignorer la validation du décalage. Cela
signifie que le décalage peut être au-delà de la fin du tampon. La valeur par
défaut est false.
buf.readUInt16LE(offset[, noAssert])
Lit un entier 16 bits non signé dans le tampon à l'emplacement spécifié avec le
22
format endian spécifié. Attribuez la valeur true à noAssert pour ignorer la
validation du décalage. Cela signifie que le décalage peut être au-delà de la fin
du tampon. La valeur par défaut est false.
buf.readUInt16BE(offset[, noAssert])
Lit un entier 16 bits non signé dans le tampon à l'emplacement spécifié avec le
23
format endian spécifié. Définissez noAssert à true pour ignorer la validation du
décalage. Cela signifie que le décalage peut être au-delà de la fin du tampon.
La valeur par défaut est false.
buf.readUInt32LE(offset[, noAssert])
Lit un entier 32 bits non signé dans le tampon à l'emplacement spécifié avec le
24
format endian spécifié. Attribuez la valeur true à noAssert pour ignorer la
validation du décalage. Cela signifie que le décalage peut être au-delà de la fin
du tampon. La valeur par défaut est false.
buf.readUInt32BE(offset[, noAssert])
Lit un entier 32 bits non signé dans le tampon à l'emplacement spécifié avec le
25
format endian spécifié. Attribuez la valeur true à noAssert pour ignorer la
validation du décalage. Cela signifie que le décalage peut être au-delà de la fin
du tampon. La valeur par défaut est false.
buf.readInt8(offset[, noAssert])
Lit un entier signé de 8 bits dans le tampon à l'emplacement spécifié.
26
Définissez noAssert à true pour ignorer la validation du décalage. Cela
signifie que le décalage peut être au-delà de la fin du tampon. La valeur
par défaut est false.
41
Node.js
27 buf.readInt16LE(offset[, noAssert])
Lit un entier signé de 16 bits dans le tampon à l'emplacement spécifié avec la
fonction
42
Node.js
43
Node.js
buf.writeUInt16LE(value, offset[, noAssert])
Écrit une valeur dans la mémoire tampon au décalage spécifié et au format
endian spécifié. La valeur doit être un entier 16 bits non signé valide.
36 Définissez noAssert à true pour ignorer la validation de la valeur et du
décalage. Cela signifie que la valeur peut être trop grande pour la fonction
spécifique et que le décalage peut être au-delà de la fin du tampon, ce qui
entraîne l'abandon silencieux des valeurs. Il ne faut pas l'utiliser à moins
d'être certain de l'exactitude des données. La valeur par défaut est false.
44
Node.js
format. La valeur doit être un entier non signé valide de 16 bits. Définissez
noAssert à true pour ignorer la validation de la valeur et du décalage. Cela
signifie que la valeur peut être trop grande pour la fonction spécifique et
que le décalage peut être au-delà de la fin du tampon, ce qui entraîne
l'abandon silencieux des valeurs. Il ne faut pas l'utiliser à moins d'être
certain de son exactitude. La valeur par défaut est false.
buf.writeUInt32LE(value, offset[, noAssert])
Écrit une valeur dans le tampon à l'emplacement spécifié avec le format
endian spécifié. La valeur doit être un entier 32 bits non signé valide.
38 Définissez noAssert à true pour ignorer la validation de la valeur et du
décalage. Cela signifie que la valeur peut être trop grande pour la fonction
spécifique et que le décalage peut être au-delà de la fin du tampon, ce qui
entraîne l'abandon silencieux des valeurs. Il ne faut pas l'utiliser à moins
d'être certain de son exactitude. La valeur par défaut est false.
buf.writeUInt32BE(value, offset[, noAssert])
Écrit une valeur dans le tampon à l'emplacement spécifié avec le format
endian spécifié. La valeur doit être un entier 32 bits non signé valide.
39 Définissez noAssert à true pour ignorer la validation de la valeur et du
décalage. Cela signifie que la valeur peut être trop grande pour la fonction
spécifique et que le décalage peut être au-delà de la fin du tampon, ce qui
entraîne l'abandon silencieux des valeurs. Il ne faut pas l'utiliser à moins
d'être certain de son exactitude. La valeur par défaut est false.
buf.writeInt8(value, offset[, noAssert])
Écrit une valeur dans la mémoire tampon au décalage spécifié et au format
endian spécifié. La valeur doit être un entier 8 bits signé valide. Définissez
40 noAssert à true pour ignorer la validation de la valeur et du décalage. Cela
signifie que la valeur peut être trop grande pour la fonction spécifique et que
le décalage peut être au-delà de la fin du tampon, ce qui entraîne l'abandon
silencieux des valeurs. Il ne faut pas l'utiliser à moins d'être certain de son
exactitude. La valeur par défaut est false.
buf.writeInt16LE(value, offset[, noAssert])
Écrit une valeur dans le tampon à l'emplacement spécifié avec le format
endian spécifié. La valeur doit être un entier 16 bits signé valide. Définissez
41 noAssert à true pour ignorer la validation de la valeur et du décalage. Cela
signifie que la valeur peut être trop grande pour la fonction spécifique et
que le décalage peut être au-delà de la fin du tampon, ce qui entraîne
l'abandon silencieux des valeurs. Il ne faut pas l'utiliser à moins d'être
certain de son exactitude. La valeur par défaut est false.
buf.writeInt16BE(value, offset[, noAssert])
Écrit une valeur dans le tampon à l'emplacement spécifié avec le format
endian spécifié. La valeur doit être un entier 16 bits signé valide. Définissez
42 noAssert à true pour ignorer la validation de la valeur et du décalage. Cela
signifie que la valeur peut être trop grande pour la fonction spécifique et
que le décalage peut être au-delà de la fin du tampon, ce qui entraîne
l'abandon silencieux des valeurs. Il ne faut pas l'utiliser à moins d'être
certain de son exactitude. La valeur par défaut est false.
buf.writeInt32LE(value, offset[, noAssert])
Écrit une valeur dans le tampon à l'emplacement spécifié avec le format
endian spécifié. La valeur doit être un entier 32 bits signé valide. Définissez
43 noAssert à true pour ignorer la validation de la valeur et du décalage. Cela
signifie que la valeur peut être trop grande pour la fonction spécifique et
que le décalage peut être au-delà de la fin du tampon, ce qui entraîne
l'abandon silencieux des valeurs. Il ne faut pas l'utiliser à moins d'être
45
Node.js
certain de son exactitude. La valeur par défaut est false.
46