Skip to content

Instantly share code, notes, and snippets.

@aliastim
Last active September 27, 2019 13:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aliastim/416889520db3059b58400920572fa190 to your computer and use it in GitHub Desktop.
Save aliastim/416889520db3059b58400920572fa190 to your computer and use it in GitHub Desktop.

Découvrir NODE JS

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');

Les templates utiles

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 global

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".

Commandes node utiles

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

Commandes npm utiles

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment