Bloc notes sur les débuts de nodejs
I Les urls visitées pour une première prise en main
- Cours openclassroom : https://openclassrooms.com/fr/courses/1056721-des-applications-ultra-rapides-avec-node-js
- premiers cours pas à pas pour faire sa première application web fonctionnelle
- sont abordés :
- le principe même de node.js ;
- l’installation de node.js ;
- le principe de téléchargement de packages via npm ;
- le module express pour la gestion des routes (plus simple que par la voie manuelle) ;
- le module ejs pour la gestion des templates ;
- le module global PM2 : gestion de l’application, redémarrage automatique et mis en cluster sur les processeurs.
- référence javascript : https://developer.mozilla.org/fr/docs/Web/JavaScript
- toutes les commandes natives de javascript…
II Installation sous Linux (unbutu)
Installation sous Linux :
# Installation de node.js et du gestionnaire de modules npm
sudo apt-get install nodejs npm
Installation directement via les sources : https://github.com/nodesource/distributions/blob/master/README.md
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
III Hello World
Script de base pour faire un serveur web :
Contenu d’un fichier nomme hello.js
var http = require('http');
var server = http.createServer(function(req, res) {
res.writeHead(200, {"Content-Type": "text/html"});
res.end('<p>Hello <strong>World</strong> !</p>');
});
server.listen(8080);
En ligne de commande Node.js, allez dans répertoire du fichier puis lancer la ligne de commande suivante :
node hello.js
Puis lancer un navigateur web à l’adresse 127.0.0.1:8080 pour voir le résultat.
Remarque importante : cette application ne fait que ça, et ce, quelque soit l’URL path.
III Un peu plus loin …
Pour prendre en compte l’URL path par exemple il faut le gérer à la main, comme le montre l’exemple ci-dessous :
var http = require('http');
var url = require('url');
var server = http.createServer(function(req, res) {
var page = url.parse(req.url).pathname;
console.log(page);
res.writeHead(200, {"Content-Type": "text/plain"});
if (page == '/') {
res.write('Accueil de la page');
}
else if (page == '/telephone') {
res.write('Gestion des téléphones');
}
else if (page == '/television') {
res.write('Sommaire des televisions');
} else {
res.write('Page non existante');
}
res.end();
});
server.listen(8080);
Lorsque l’on instancie un objet server par la méthode createServer, la fonction callback en paramètre prend 2 objets :
- un objet de type « request » instancié de la classe http.IncomingMessage (la requete reçue au serveur)
- doc : https://nodejs.org/dist/latest-v12.x/docs/api/http.html#http_class_http_incomingmessage
- méthodes les plus utilisées seront :
- method() : renvoie le type de méthode HTML utilisé (GET,POST, DELETE, etc)
- url() : url demandée par le client
- un objet de type « response’ instancié de la classe http.ServerResponse (la réponse envoyée par le serveur)
- doc : https://nodejs.org/dist/latest-v12.x/docs/api/http.html#http_class_http_serverresponse
- méthodes les plus utilisées seront :
- writeHead(statusCode[, statusMessage][, headers]) : définit le header de la page html
- write(chunk[, encoding][, callback]) : pour écrire un flux
- end([data[, encoding]][, callback]) : pour indiquer au client la fin de la transmission
Autre exemple qui affiche les méthodes de Response et Request, en sortie HTML et en UTF8 :
var http = require('http');
var url = require('url');
var server = http.createServer(function(req, res) {
var page = url.parse(req.url).pathname;
console.log ("page accueil")
// prépare le header : réponse ok (code 200) et texte en UTF-8
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'})
let contenu_html = ""
contenu_html += '<!DOCTYPE html>'
contenu_html += '<html><body>'
contenu_html += "Bonjour à tous <br>"
contenu_html += "<br><br>"
contenu_html += "URL de la page demandée : " + req.url + "<br>"
contenu_html += "URL path de la page demandée : " + page
contenu_html += "<br><br>"
contenu_html += "<u>Liste des méthodes de Request </u>: <br>"
// affiche méthode de req
for (var key in req) {
if (!req.hasOwnProperty(key)) {
contenu_html += key + " " + "<br>"
}
}
contenu_html += "<br><br>"
contenu_html += "<u>Liste des méthodes de Response </u>: <br>"
// affiche méthode de res
for (var key in res) {
if (!res.hasOwnProperty(key)) {
contenu_html += key + " " + "<br>"
}
}
contenu_html += "</body></html>"
// écrit une sortie
res.write(contenu_html);
// fin génération sortie
res.end()
});
server.listen(8080);
