NodeJS est un langage de bas niveau reposant sur Javascript, ce qui lui apporte de multiples avantages :
- Il permet d'utiliser JavaScript côté serveur
- C'est un langage asynchrone qui permet de gérer plusieurs événements à la fois
- C'est un environnement de bas niveau (il ressemble davantage à du C ou du Python que du PHP)
- Il est beaucoup plus rapide que les autres langages (repose sur le moteur d'exécution V8 de Chrome)
- C'est un modèle non bloquant*
- Modèle bloquant : les actions sont réalisées les unes après les autres, le script ne peut pas réaliser d'autres actions tant que les précédentes n'ont pas été effectuées.
- Modèle non bloquant : les actions sont réalisées en parallèles, ce qui permet au script de réaliser une action pendant qu'une autre est en cours, l'exécution est de ce fait plus rapide.
A la différence de PHP qui repose sur Apache comme serveur web HTTP, Node.js n'utilise pas de serveur HTTP, il faut donc le créer soit-même :
/*Fichier de base pour exécuter un serveur sur son projet*/
var http = require('http');
var url = require('url');
var server = http.createServer(function(req, res) {
var page = url.parse(req.url).pathname;
res.writeHead(200, {"Content-Type": "text/html"});
res.write('<p>Mon texte html</p>');
res.end();
});
server.listen(8080);
Ici :
- require('http') : On appelle la bibliothèque Node pour créer un serveur web
- require('url') : On appelle la bibliothèque Node pour récupérer la page demandée par le visiteur
- http.createServer(function(req, res) : On initialise le serveur et on appelle une fonction à exécuter quand un visiteur se connecter au site. Req : Requêtes visiteurs (nom de page, paramètres, etc), Res : Réponse à envoyer au visteur (Code HTML de la page demandée, du texte, etc)
- url.parse(req.url).pathname : On parse la requête du visiteur pou obtenir le nom de la page demandée
- res.writeHead(200, {"Content-Type": "text/html"}) : On indique au serveur quoi faire si tout fonctionne correctement, ici, on indique que l'on charge une page html.
- res.write() : Ici, retourne le contenu HTML de la page
- res.end() : Envoie le contenu demandé (ici la page HTML)
- server.listen(8080) : Lance le serveur local
Pour inclure un autre fichier node (A l'instar d'un require()) :
Si le fichier MonFichier.js est au même niveau que les autres fichiers, on retire le ".js"
var MonFichier = require('./MonFichier'); /* ou require('../MonFichier') pour un dossier parent */
Si on a placé au préalable MonFichier.js dans le sous dossier "node_modules" :
var MonFichier = require('MonFichier');
La force de Node se situe aussi par la variété des modules qu'il propose (Frameworks, templates, etc), voici quelques templates intéressants :
- Express (
npm install express
) : Framework qui fournit des outils de base pour un projet node, il permet notamment de gérer des routes dynamiques, c'est à dire avec des variables dans les URL. Il comporte également des middlewares intégrés (des mini applications) pour gérer des processus, par exemple : 'cookie-session' : pour gérer la session des utilisateurs, 'serve-favicon' : pour définir le favicon d'un site, etc - EJS (
npm install ejs
) : Système de templates, à l'instar de Twig. Les fichiers EJS doivent se trouver dans un dossier "Views". - Socket.io (
npm install socket.io
) : Permet de faire des requêtes asynchrones. Le serveur s'adresse ainsi directement au client et les événements sont envoyés/reçus en temps réel (Ex : un Chat)
Pour les bases de données, il existe plusieurs possibilité : - Mysql (
npm install mysql
) : Base de données relationnelle : fonctionne sur du SQL. - Postgresql : Base de données relationnelle : fonctionne sur du SQL.
- MongoDB : base de données non relationnelle indépendante de NodeJS : choix du langage.
Template à installer de façon globale (-g), c'est à dire sur l'ordinateur et non un seul projet :
- PM2 (
npm install pm2 -g
) : Permet d'éviter les crashs d'application au lancement d'un projet et de mieux identifier les éventuelles erreurs.
-> Lancer un projet avec la commande "pm2 start MonFichier.js
".
-> Pour lancer un programme en mode Watch (Le projet se recharge à chaque modification) :
"pm2 start app.js --watch
".
=> Coupler avec "pm2 monit
" pour avoir plus de précisions dans le terminal.
-> Pour avoir des infos sur le fichier lancé :"pm2 ls
".
-> Pour arrêter une application : "pm2 stop app
".
-> Pour redémarrer une application : "pm2 restart app
".
Permet d'exécuter le projet sur un serveur local
node server
Permet d'exécuter un fichier NodeJS (Note : faire ctrl + C dans le terminal pour couper le processus) :
node MonFichier.js
Connaître la version actuelle de node
node --version
Pour installer les packages d'un projet cloné :
npm install
Pour démarrer un projet et installer le fichier
package.json
npm init
Pour démarrer le fichier start indiqué dans le
package.json
npm start