Programme de Formation Node.js : Gérer la persistance de données avec l'ODM Mongoose
Configurer un projet Mongoose
Mongoose : Présentation, fonctionnalités
MongoDB : Installation, structure d'un schéma (collections, documents)
Configuration d'un projet Node.js utilisant Mongoose : pool de connexion, contraintes
Propriétés par défaut et paramétrage
Gestion des options de logging
Atelier : Intégration de Mongoose dans un projet Node.js, configuration de la Bdd NoSQL MongoDB et des tracesConstruire un modèle et écrire des requêtes
Modèle de base
Documents et sous-dodcuments
Gestion des types
Requêter des documents
Mise à jour et suppression de documents
Gestion des validations
Mongoose migrations (ts-migrate-mongoose)
Atelier : Réalisation d'un schéma global de BDD MongoDB, gestion des migrations et écriture de requêtesMaîtriser des concepts avancées
Cache : fonctionnement, mise en cache de requêtes (mongoose-cache)
Hooks
Mise en place d'une solution d'audit de tables (historique de modifications)
Atelier : Implémentation d'une couche complète de persistance - mise en place d'un cache
Programme de Formation Node.js : Fondamentaux
Introduction
Présentation des versions de node
Principe d'un serveur Web
Comparaison entre serveur
Rappels de Javascript
Atelier : Télécharger et installer NodeJSPrésentation de Node.js
Gérer les versions de node (nvm vs n)
L'intérêt de javascript côté serveur
La single-threaded event loop
L'API non bloquante
Le moteur V8 de Google
Node.jset Ecmascript
Historique d'Ecmascript
Présentation du mode strict
Support d'ecmascript dans NodeJS (node.green)
Utiliser le gestionnaire de paquets
Présentation et description
npm: node package manager
Initialiser un projet avec npm
Présentation de la bibliothèque de module
Installation locale ou globale
Le fichier package.json
Gérer les dépendances (production et developpement)
npm et npx
Ajouter des scripts
Atelier : Créer différents scripts utiles à un projetLes variables globales
La documentation de l’API de Node
Les classes Global, Console (log, errors, trace)
Les variables __filename et __dirname
Capter et émettre des évènements
Les Timers
Atelier : Executer notre premier scriptManipuler les fichiers
Présentation du module FileSystem
Gérer les chemins et les urls
Créer, supprimer, renommer des fichiers et dossiers
Lire le contenu d'un fichier
Atelier : Manipuler des fichiersCallback et Promise
Présentation des callbacks (fonction de rappel)
Principe des Promises (les promesses)
Callbacks vs Promises
Implémentation des promesses
Transformation d'une fonction de rappel en promesse
Travailler les promesses avec la syntaxe async/await
Atelier : Utiliser les promessesCréer des modules Node.js
Isoler des fonctionnalités
Exporter des fonctions
Inclure des modules dans un projet
Différence entre module CommonJS et EcmaScript
Atelier : Créer ses propres modulesCréer un serveur avec Node.js
Le module "http"
Request et Response
Modifier les entêtes
Parser une url
Afficher des contenus au format HTML, JSON, XML
Gérer l'affichage des fichiers css, image et js
Atelier : Créer un serveur de fichiers statiquesCréer un serveur avec Express
Présentation de "Express"
Créer un projet Express
Les middlewares
Gérer les verbes http
Ajouter un moteur de templates
Récupérer les paramètres de requête, d'url et de formulaire
Les modules Morgan, Helmet, Cors
Utiliser Express avec Typescript
Atelier : Utiliser Express pour créer une application Web ou une API REST avec authentificationLes bases de données
Se connecter à des bases de données SQL et NoSQL
Récupérer un connecteur de SGBD
Utiliser et configurer un ORM : TypeORM
Créer une classe d’entité
Executer des requêtes et récupérer les resultats
Mettre en place des relations entre deux entités
Atelier : Connecter une base de donnéesTester une application
Présentation de Mocha
Les assertions dans Node.js : assert
Le module Chai
Les tests synchrones et asynchrones
Les hooks
Atelier : Lancer plusieurs tests
Programme de Formation Node.js : Construire une API REST avec Express.js
Comprendre l'architecture
Architecture en couches : du monolythe au microservices
Contraintes d'architecture des microservices
Gestion de l'authentification centralisée dans une architecture microservices
Intérêt d'une passerelle d'API
Gestion centralisée des traces
Développement d'API REST avec Express.js
Express.js : principe, fonctionnalités, pré-requis
Configuration du projet : packages et modules additionnels : Morgan, Helmet, Cors,...
Configuration de morgan pour la gestion des logs de requêtes HTTP
Organisation des couches du projet : routes, services, repositories
Intérêt d'une couche DTO, utilisation d'un mapper d'objets : automapper ou autre
Implémentation de contrôleurs REST : gestion des routes, traitement asynchrone
Gestion des paramètres de méthodes et du mapping
Gestion du download
Gestion de l'upload, configuration
Gestion des services et des transactions associées
Gestion du cross origin avec Cors et restriction des domaines appelants
Test de l'api REST avec Postman
Ecriture de tâches asynchrones, planification
Cache web
Atelier : Écriture de micro-services avec Express.js - Test des méthodes de services avec Postman ou autreDocumenter une API REST
Open API Specification (Swagger) : présentation, outil
Utilisation de express-openapi
Visualisation avec Swagger Editor
Documentation du code Java, génération de javadoc
Atelier : Documentation de l'apiIntercepter des requêtes et gérer les erreurs
Gestion globale des exceptions
Capture d'exceptions personnalisées
Intercepteurs de requêtes/réponses
Atelier : Gestion des exceptions et implémentation d'intercepteursAppeler d'autres API REST (écriture de clients)
http_request : méthodes et paramètres
Ecriture de requêtes GET, POST, PUT, DELETE
Gestion des paramètres et du corps de la requête
Gestion des headers
Gestion des réponses et utilisation de mappers
Atelier : Implémentation de clients pour un service RESTSécuriser l'API REST
Configuration de Helmet
Gestion des données d’entête
Gestion des utilisateurs et des rôles : mise en place de JWT (passport-jwt)
Hachage des mots de passe avec bcryptjs
Atelier : Intégration de Helmet, jsonwebtoken, dotenv et bcryptjsTester une application Express.js avec Jest et SuperTest
Stratégies de tests, types supportés
Installation de jest, supertest et cross-env, configuration de l'application
Mocking des couches de l'application
Tests auto-configurés
Exécution et reporting
Atelier : implémentation et exécution de tests avec Jest et supertest
Programme de Formation Node.js : Gérer la persistance de données avec TypeORM
Configurer un projet TypeORM
TypeORM : Présentation, fonctionnalités, SGBDR supportés
Configuration d'un projet Node.js utilisant TypeORM : DataSource
Propriétés par défaut et paramétrage
Gestion des options de logging, custom Logger
Atelier : Intégration de TypeORM dans un projet Node.js, configuration de la datasource et des tracesRéaliser le mapping des entités et des opérations
TypeORM et le pattern Repository Mapping des entités avec des annotations et gestion des clés primaires (simples, composées)
Mapping des types de bases, propriétés des colonnes
Gestion de la concurrence : optimistic (versioning), pessimistic
Gestion des relations : OneToMany/ManyToOne, OneToOne, ManyToMany
Paramétrage des cascades
Gestion des collections : Map, Set, List,...
Mapping de l'héritage
Stratégies de chargement : Lazy ou Eager
Gestion des migrations
Atelier : Réalisation d'un schéma global de mapping d'une base de données relationnelle et gestion des migrationsEcrire des requêtes
Interface Repository et ses dérivées (TreeRepository) : méthodes disponibles (CRUD)
Requêtes avec QueryBuilder : jointures, paramètres, fetch
Pagination de résultats
Gestion des procédures stockées
Atelier : Ecriture de repositories et testsMaîtriser des concepts avancées
Cache : fonctionnement, mise en cache de requêtes ou de repository
Configuration du cache global de data source
Mise en place d'une solution d'audit de tables (historique de modifications)
Atelier : Implémentation d'une couche complète de persistance - mise en place d'un cache
Programme de Formation Node.js : Gérer la persistance de données avec l'ORM Sequelize
Configurer un projet Sequelize
Sequelize : Présentation, fonctionnalités, SGBDR supportés
Configuration d'un projet Node.js utilisant Sequelize : pool de connexion, contraintes,
Propriétés par défaut et paramétrage
Gestion des options de logging
Atelier : Intégration de Sequelize dans un projet Node.js, configuration de la Bdd et des tracesDéfinir un modèle et écrire des requêtes
Modèle de base : attributs, clés, instances du modèle et synchronisation
Gestion des types
Gestion de la concurrence : optimistic (versioning), pessimistic
Gestion des associations : OneToMany/ManyToOne, OneToOne, ManyToMany
Paramétrage des cascades
Gestion des collections : Map, Set, List,...
Mapping de l'héritage
Stratégies de chargement : Lazy ou Eager
Gestion des migrations avec sequelize-cli
Ecriture de requêtes, support de Paranoid tables
Atelier : Réalisation d'un schéma global de mapping d'une base de données relationnelle, gestion des migrations et écriture de requêtesMaîtriser des concepts avancées
Cache : fonctionnement, mise en cache de requêtes
Hooks
Mise en place d'une solution d'audit de tables (historique de modifications)
Atelier : Implémentation d'une couche complète de persistance - mise en place d'un cache
Programme de Formation Angular : Approfondissement
Les composants interactifs
Cycle de vie des composants
Transmettre des paramètres vers une variable ou un mutateur
Les Décorateurs @Input et @Output
Notifier un composant avec EventEmitter
Composant(s) enfant(s): @ViewChild et @ViewChildren
Les guards
Présentation et utilité des guards
Liste des Guards (CanActivate, CanActivateChild, etc)
Gestions des types de retour
Créer des redirections à l'aide de l'UrlTree
Atelier: Restreindre l'accès aux RoutesArchitecture en Module
Décomposer le projet en Module
Navigation entre module
Le chargement fainéant: forRoot & forChild
Restreindre l'accès à l'aide du guard canLoad
Stratégie de préchargement
Personnalisé les strategies de préchargement
Atelier: Découper le projet en ModuleHttpClientModule
Rappel Module HttpClient
Présentation des Interceptors
Logique de manipulation des interceptors
La classe HttpEvent
Gestion de la mise en cache des requêtes
Atelier: Manipuler les interceptors
Rendu côté serveur
Intérêt du server-side Rendering
Présentation de Node Express
Utiliser le Server-side Rendering à l'aide du composant Universal
Tester l'application
Fondamentaux des tests avec Jasmine
Automatisation des tests avec Karma
Tester des composants simples
Tester des composants avec services asynchrones
Tester des formulaires
Atelier : Multiples exemples de tests