Node.js est un ensemble de technologies permettant d’exécuter du code JavaScript mais aussi de gérer son projet logiciel et ses dépendances avec d’autres librairies. Node.js s’est imposé comme une technologie majeure du développement JavaScript fullstack grâce à son approche pragmatique et performante. Une grande majorité des projets utilisant du JavaScript mettent en oeuvre Node.js que ce soit pour créer des sites web, développer des web services ou des API REST, ou comme socle de construction d’applications front-end ou back-end.
Introduction à Node.js
- Qu’est-ce que Node.js ?
- Les outils: node et npm
- Environnement de développement Node.js
- Notions d’architecture Node.js: IO, asynchrone, non bloquant, concurrence, event-loop, scalability
- Ateliers: Installation de Node.js et d’un environnement de développement / Démonstration de la event loop à travers un premier programme asynchrone / non-bloquant / REPL
Évènements
- Architecture de Node.js basée sur les évènements
- Event et EventEmitter
- Synchrone vs Asynchrone
- Gestion des évènements multiples ou unique
- Gestion des erreurs
- Ateliers: Développement d’EventEmitter personnalisé
Streams
- Exemples de données streaming gérées par Node.js
- Les différents types de Streams
- Buffers internes
- Pipelines
- Ateliers:
- Consommer une stream Readable (http, fs)
- Ecrire dans une stream Writable (fs)
- Exploiter une stream Duplex (net.Socket)
- Utiliser une stream Transform (zlib)
Gestion d’erreurs
- Les différents types d’erreurs
- Gestion d’erreur dans les APIs synchrones
- Gestion d’erreur dans les APIs asynchrones
- Assertions
- Logging via l’API Console
- Debugger un programme Node.js
- Ateliers:
- Gestion d’erreur dans les APIs synchrones
- Gestion d’erreur dans les APIs asynchrones
- Débugger un programme Node.js dans son IDE ou dans Chrome
Modularité
- Object Global et scope inter-modules
- Objects accessibles globalement
- Modules, scopes et gestion des fichiers
- Core modules
- Module main
- Algorithme de chargement des modules et cache de modules
- NPM et modules tiers
- Ateliers:
- Utilisation de l’objet Global
- Objets accessibles globalement: process
- Usage de core modules: timer, OS, Util, Path, …
- Création de module interne à l’application
- Création d’un projet Node.js via NPM et installation de modules populaires
Clients/Serveurs TCP et UDP
- Module Net pour création de serveurs et clients TCP
- Module UDP/Datagram pour création serveurs et clients UDP/Datagram
- Ateliers: Création de clients / serveur TCP / Création de clients / serveur UDP/Datagram
Clients/Serveurs http, https et http/2
- Modules http, https et http/2 pour la création de serveurs et clients http, https et http/2
- Module url pour exploiter les requêtes http
- Ateliers:
- Création de serveurs et clients http, https et http/2 dans le cadre d’un site web
- Création de serveurs et clients http, https et http/2 dans le cadre d’un webservice RESTFul
Interactions avec le système de fichiers
- Le module fs et sa proximité avec POSIX
- APIs synchrones vs APIs asynchrones
- Ateliers: Interactions avec le système de fichiers via APIs synchrones et asynchrones
Développement de back-end web
- Gestion des données avec bases de données Relationnelles (Mysql) ou NoSQL (Mongo, Redis)
- Gestion du middleware (connect, expressjs)
- Gestion de templates (ejs)
- Ateliers: Création d’un back web statique et dynamique avec express.js / Création d’une API RESTFul avec express.js
Déployer une application Node.js
- NPM: les principales commandes
- NPM: packager un module
- Différents modes de déploiement d’un projet Node.js
- Modules Forever et PM2
- Ateliers: Packager une librairie / Dockerizer une application web Node.js