Ce mini-cours est un résumé du w3schools.com/nodejs
Node.js permet de disposer d'un petit serveur web, léger et rapide, sur son ordinateur. Il permet :
- de créer un micro serveur web
- de créer, ouvrir, lire, écrire, effacer et fermer des fichiers (sur le serveur)
- de récupérer des données
- d'ajouter, effacer et modifier des données d'une base de données
- ...
Ici, le JS est utilisé comme le PHP, un langage permettant de donner des instructions au serveur. Apache est un (gros) serveur pour PHP, Node.js est un (petit) serveur pour JS. Cependant, ici JS, contrairement au PHP, utilise la programmation asynchrone, c-à-d qu'il lance la requête suivante avant de recevoir la réponse à la première requête.
Les fichiers contenant les instructions au serveur Node.js utilisent la syntaxe de JS.
Le code JS destiné au navigateur et celui destiné au serveur sont mis dans deux
fichiers distincts (d'extension .js
). Ils peuvent co-exister
dans un même dossier.
Le navigateur est le client du serveur.
Un fichier d'extension .js
utilisé coté-client est
appelé par du code HTML. Mais, ici, il doit être lancé ...
Après téléchargement de Node.js sur le site
officiel et son installation, pour lancer ce type de fichier (codé en JS), il faut
ouvrir une console (dans le dossier le contenant) et taper (après le prompt) :
node nom_du_fichier
. Par exemple :
node myfirst.js
Exemple. Contenu de myfirst.js :
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.end('Hello World!'); }).listen(8080);
Puis, de taper dans la barre des URLs du navigateur : http://localhost:8080
Pour éteindre le serveur, il suffit de retourner dans le terminal et taper CTRL+C
.
Lancement du serveur
Si la variable d'environnement PATH
a été correctement configurée
(automatiquement lors de l'installation), le serveur peut être lancé dans n'importe
quel dossier du disque dur (via un terminal)
Si, après le prompt, est simplement tapé node
, s'affiche le
numéro de la version et la commande à utiliser pour obtenir de l'aide.
Welcome to Node.js v14.16.0. Type ".help" for more information. >
Si est tapé .help
, s'affiche :
.break Sometimes you get stuck, this gets you out .clear Alias for .break .editor Enter editor mode .exit Exit the REPL .help Print this help message .load Load JS from a file into the REPL session .save Save all evaluated commands in this REPL session to a file Press Ctrl+C to abort current expression, Ctrl+D to exit the REPL >
Un module est un ensemble de fonctions. Lors de l'installation de Node.js un certain nombre de modules (built-in) sont installés. Cette liste peut dépendre de la version de Node.js. Toutefois, les modules les plus courants sont les mêmes que ceux des versions anciennes.
Il existe même un module (à installer) qui permet d'obtenir cette liste. Plus d'info
On peut également créer ses propres modules.
require()
Pour inclure un module, il suffit d'utiliser la fonction require()
avec le nom du module. Par exemple :
var http = require('http');
Il est possible de créer ses propres modules. Exemple de code ("myfirstmodule.js") :
exports.myDateTime = function () { return Date(); };
Il suffit d'utiliser le mot clé exports
pour que la méthode ou
la propriété soit accessible hors du module (par le fichier contenant le code l'appelant)
Exemple de code incluant myfirstmodule.js
:
var http = require('http'); var dt = require('./myfirstmodule'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write("The date and time are currently: " + dt.myDateTime()); res.end(); }).listen(8080);
./
indique que le fichier appelé (sans l'extension .js) est
dans le même dossier que le fichier l'appelant.
Module http
Le module http
permet de créer un micro serveur HTTP.
var http = require('http'); /* create a server object: */ http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('Hello World!'); /* write a response to the client */ res.end(); /* end the response */ }).listen(8080); /* the server object listens on port 8080 */
Le serveur HTTP ainsi créé est un objet ...
Le paramètre de la méthode .createServer()
est une fonction qui est exécutée
lorsque "quelqu'un" écoute sur le port 8080.
Bien que facultative, mieux vaut ajouter la ligne
res.writeHead(200, {'Content-Type': 'text/html'});
si le client est un navigateur web.
res
est l'objet envoyé au client (la réponse).
req
est l'objet envoyé par le client (sa requête). Cet objet dispose de la
propriété .url
(qui contient la valeur de ce qui est dans la barre d'URL du
navigateur).
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(req.url); res.end(); }).listen(8080);
L'extraction des paramètres d'une URL (tel que ...?year=2017&month=July)
implique l'inclusion du module url
.
var http = require('http'); var url = require('url'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); var q = url.parse(req.url, true).query; var txt = q.year + " " + q.month; res.end(txt); }).listen(8080);
La méthode .end
peut contenir un paramètre, la réponse à envoyer.
Module fs
Le module fs
permet d'accéder au File System (gestionnaire de
fichiers) de votre ordinateur.
Code valable pour ouvrir tout fichier index.htm
(indexNode.js) :
var http = require('http'); var fs = require('fs'); http.createServer(function (req, res) { fs.readFile('index.htm', function(err, data) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(data); return res.end(); }); }).listen(8080);
L'objet fs
dispose de la méthode .readFile()
.
Autres méthodes : .appendFile(), .open(), .writeFile(), .unlink(), .rename(), ...
Cependant, la manipulation de fichiers peut aussi être faite en Python (ou en
C, ...)
Plus d'info sur ces manipulations via Node.js
Module url
Le module url
permet d'utiliser la méthode .parse()
qui permet
d'obtenir les différentes parties d'une URL.
var url = require('url'); var adr = 'http://localhost:8080/default.htm?year=2017&month=february'; var q = url.parse(adr, true); console.log(q.host); /* returns 'localhost:8080' */ console.log(q.pathname); /* returns '/default.htm' */ console.log(q.search); /* returns '?year=2017&month=february' */ var qdata = q.query; /* returns an object: { year: 2017, month: 'february' } */ console.log(qdata.month); /* returns 'february' */
Code pour ouvrir toute page HTML
(dont l'url est indiquée dans la barre des URLs du navigateur)
var http = require('http'); var url = require('url'); var fs = require('fs'); http.createServer(function (req, res) { var q = url.parse(req.url, true); var filename = "." + q.pathname; fs.readFile(filename, function(err, data) { if (err) { res.writeHead(404, {'Content-Type': 'text/html'}); return res.end("404 Not Found"); } res.writeHead(200, {'Content-Type': 'text/html'}); res.write(data); return res.end(); }); }).listen(8080);
NPM
NPM est un gestionnaire de package (modules), installé lors de l'installation de Node.js.
Des milliers de modules peuvent être trouvés sur npmjs.com.
Pour installer un package, il suffit de taper npm
install
suivi du nom du package dans le terminal ouvert dans le dossier
choisi (...\threeJS). Par exemple :
npm install three
S'affiche (après 56 secondes) :
npm WARN saveError ENOENT: no such file or directory, open '...\threeJS\package.json' npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open '...\threeJS\package.json' npm WARN threeJS No description npm WARN threeJS No repository field. npm WARN threeJS No README data npm WARN threeJS No license field. + three@0.157.0 added 1 package from 1 contributor and audited 1 package in 56.626s found 0 vulnerabilities
et ont été créés dans ce dossier (...\threeJS) :
- un dossier de 26Mo nommé "node_modules"
- un fichier nommé "package-lock.json"