Alphorm.com Support de la formation NodeJS , avancé

221
10/03/2016 1 Formation NodeJS, avancé alphorm.com™© Formation Avancée de NodeJS Site : http://www.alphorm.com Blog : http://blog.alphorm.com Édouard FERRARI Formateur et Consultant indépendant Contact : [email protected]

Transcript of Alphorm.com Support de la formation NodeJS , avancé

Page 1: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

1

Formation NodeJS, avancé alphorm.com™©

FormationAvancée de NodeJS

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Page 2: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

2

Formation NodeJS, avancé alphorm.com™©

Plan• Présentation du formateur

• Plan de formation

• Objectifs de la formation

• Public concerné

• Les possibilités de NodeJS

• Les connaissances requises

Page 3: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

3

Formation NodeJS, avancé alphorm.com™©

Présentation du formateur

Edouard FERRARI• [email protected]

• Développeur full stack chez Summview

• Mission de conseil, d’architecture et de migration

• Mes références :

� LinkedIn : https://fr.linkedin.com/in/edouardferrari

� Alphorm : http://www.alphorm.com/formateur/edouard-ferrari

� Github : https://github.com/didouard

Page 4: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

4

Formation NodeJS, avancé alphorm.com™©

Plan de la formation• Présentation de la formation

� Présentation de la formation

� Scénario de la formation

• Node et le Web : HTTP, Request & Express� Périmètre du module HTTP

� Request

� Serveur Web avec Express

� Express : Router les requêtes

� Express : Le gestionnaire de route

� Express : les fichiers statiques

� Express : Utiliser les middlewares

� Express : Les moteurs de template

� Side Project : ChatWithMe

• L’asynchrone en détail

� Callback Hell & Pyramid of Doom

� Async : Cours

� Async : Correction d'exercice

� Les promesses avec Q : Les fondamentaux

� Les promesses avec Q : Gestion des erreurs et les accès directs

� Les promesses avec Q : Flow, Timers et I/O

� Les promesses : Exercices

• Communication temps réel� Socket.io

� Intégration à Express

� Projet : ChatWithMe Partie 1

� Projet : ChatWithMe Partie 2

Page 5: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

5

Formation NodeJS, avancé alphorm.com™©

Plan de la formation• Liaison avec la persistance des données

� Intéraction avec une base de données relationnelle (Mysql)

� Sequelize, l'introduction

� Sequelize, les associations

� Intégration avec une base de données NoSQL : Redis

� Intégration avec une base de données NoSQL : Mongo, l'introduction

� Intégration avec une base de données NoSQL : Mongo, les associations

� Intégration de MySQL à ChatWithMe

� Intégration de Sequelize à ChatWithMe

� Intégration de MongoDB à ChatWithMe

• Bonus

� PM2, le monitoring

� Keymetric, la supervision

• Conclusion

Page 6: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

6

Formation NodeJS, avancé alphorm.com™©

Objectifs de la formation• Apprendre et comprendre les différentes méthodes asynchrones de

NodeJS.

• Apprendre à concevoir un projet important.

• Comprendre comment fonctionne un des frameworks les plus utilisés de NodeJS.

• Mettre en place un système MVC et une abstraction de base de données.

• Savoir développer une application web d’un niveau professionnel.

Page 7: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

7

Formation NodeJS, avancé alphorm.com™©

Public concerné• À qui s’adresse cette formation :

� Aux étudiants

� Aux développeurs

� Aux chefs de projet

� Aux amoureux des nouvelles technologies

� Ceux qui veulent découvrir l’event coding et l’asynchrone

� Ceux qui ont besoin d’une architecture robuste, scalable et modulaire

� Pour un projet orienté Web ou pour un projet back

• Les possibilités sont infinies et immenses !

Page 8: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

8

Formation NodeJS, avancé alphorm.com™©

Les possibilités de NodeJS• Serveur et site internet complexe

• Application console

• Service réseau sur mesure (Proxies, gestion réseau, …)

• Application avec GUI (Graphical User Interface)

• Outils en ligne de commandes

• APIs

• Support des sockets

• Chargement du code node au premier appel HTTP

Page 9: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

9

Formation NodeJS, avancé alphorm.com™©

Les connaissances requises• Au minimum :

� Connaissance de base en Javascript

� Autodidacte

� Connaissance globale en programmation

� Connaissance en réseau / internet

� Connaissance en asynchrone

� Connaissance en event-driven architecture

� Bien connaitre les modules natifs de NodeJS

Page 10: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

10

Formation NodeJS, avancé alphorm.com™©

Liens et ressources• NodeJS API : https://nodejs.org/api/ !!!

• Projet github en nodejs : https://github.com/search?utf8=%E2%9C%93&q=nodejs

• Stackoverflow : http://stackoverflow.com/tags/node.js

• Nodecloud : http://www.nodecloud.org/

Page 11: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

11

Formation NodeJS, avancé alphorm.com™©

Are you ready ? ☺

Page 12: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

12

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Scénariode la formation

Page 13: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

13

Formation NodeJS, avancé alphorm.com™©

Plan

• Formation

• Side project : ChatWithMe

Page 14: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

14

Formation NodeJS, avancé alphorm.com™©

Formation• Cette formation est une seconde partie de la formation complète de

NodeJs, les fondamentaux.

• Dans cette seconde partie, nous verrons ensemble :

� Comment utiliser un des frameworks les plus utilisés de NodeJS : Express

� Deux méthodes de code asynchrone.

� Comment communiquer du code JavaScript côté client (navigateur web)

� Comment sauvegarder nos données dans des bases de données ou dans des fichiers

• En plus, dans cette formation, nous développerons une plateforme web sur le modèle MVC et avec une abstraction de base de donnée.

Page 15: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

15

Formation NodeJS, avancé alphorm.com™©

Side Project : ChatWithMe• À partir d’un squelette, nous allons développer une base solide d’un

chat.

• Nous développerons par étape

1. Le serveur web.

2. La communication en temps réel avec le navigateur.

3. La sauvegarde des données.

4. Le monitoring de l’application

• Libre à vous d’améliorer ce projet après cette formation.

Page 16: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

16

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Les cours, les exercices et le “side-project” sont complémentaires.

• Nous allons voir beaucoup de code.

• Vous pouvez télécharger toutes les sources dans votre espaceutilisateur sur Alphorm.com

• Prochain chapitre:

� Node et le Web : HTTP, Request & Express

Page 17: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

17

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Périmètre du module HTTP

Node et le Web

Page 18: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

18

Formation NodeJS, avancé alphorm.com™©

Plan

• Rappel

• Une requête HTTP (partie client)

• Un serveur HTTP (partie serveur)

Page 19: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

19

Formation NodeJS, avancé alphorm.com™©

Rappel• Le module HTTP permet de :

� Créer un client pour interagir avec un serveur HTTP.

� Créer soit même un serveur HTTP.

� Manipuler les headers et user-agents

• Ce module est une surcouche au module NET.

• API https://nodejs.org/api/http.html

Page 20: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

20

Formation NodeJS, avancé alphorm.com™©

Une requête HTTP (partie client)• Créons notre premier script pour envoyer une requête avec ‘http’

• Dans ‘FR_260_02_00/Exercices/’

� Faire un script qui se connectera à l’URL https://httpbin.org/get en GET

� Faire un script qui se connectera à l’URL https://httpbin.org/post en POST avec en ‘formData’ :

• User : ‘bob’

• Message : “Bonjour !”

• Correction :

• ‘FR_260_02_00/Exercices/exercice_request_get_corrigé.js’

• ‘FR_260_02_00/Exercices/exercice_request_post_corrigé.js’

Page 21: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

21

Formation NodeJS, avancé alphorm.com™©

Un serveur HTTP (partie serveur)• Dans ‘FR_260_02_00/Exercices/’

• Développer un serveur HTTP et gérer différemment les requêtes GET et POST

• Bonus : Gérer deux routes différentes :

� http://localhost:12000/users

� http://localhost:12000/media

• Correction : ‘FR_260_02_00/Exercices/exercice_server_http_corrigé.js’

Page 22: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

22

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Un rapide rappel de NodeJS

� Comment lancer une requête HTTP avec le module natif.

� La difficulté de créer un serveur HTTP avec le module natif.

• Dans la prochaine vidéo, nous verrons le module Request, qui est uneabstraction des modules natifs HTTP/HTTPS, et qui prend en charge énormément de fonctionnalités.

Page 23: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

23

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Request

Node et le Web

Page 24: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

24

Formation NodeJS, avancé alphorm.com™©

Plan

• Le module Request

• Les requêtes HTTP(s)

Page 25: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

25

Formation NodeJS, avancé alphorm.com™©

Le module Request• Le module Request est une abstraction de différents modules natifs de

NodeJs.

• Il est designé pour être le plus simple possible d’utilisation.

• Supporte :

� HTTP / HTTPS

� Suit les redirections 2xx

� Gère les requêtes en event ou stream/pipe

� …

• API https://github.com/request/request

Page 26: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

26

Formation NodeJS, avancé alphorm.com™©

Les requêtes HTTP(s)• Créons notre premier script pour envoyer une requête avec ‘request’

• Dans ‘FR_260_02_01/Exercices/’

� Faire un script qui se connectera à l’URL https://httpbin.org/get en GET

� Faire un script qui se connectera à l’URL https://httpbin.org/post en POST avec en ‘formData’ :

• User : ‘bob’

• Message : “Bonjour !”

• Correction :

• ‘FR_260_02_01/Exercices/exercice_request_get_corrigé.js’

• ‘FR_260_02_01/Exercices/exercice_request_post_corrigé.js’

Page 27: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

27

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment lancer des requêtes HTTP(s) avec request

• Prochaine vidéo :

� Serveur Web avec Express

Page 28: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

28

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Serveur Web avec Express

Node et le Web

Page 29: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

29

Formation NodeJS, avancé alphorm.com™©

Plan

• Qu’est-ce qu’Express ?

• Installation

• Hello word

• le ‘Generator’

Page 30: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

30

Formation NodeJS, avancé alphorm.com™©

Qu’est-ce qu’Express ?• Express est une infrastructure web minimaliste, souple et rapide pour

Node.JS

• Express fournit un ensemble de fonctionnalités robustes pour les applications web et mobiles.

• Grâce à une foule de méthodes utilitaires HTTP et de middleware mise à votre disposition, la création d'une API robuste est simple et rapide.

• Express apporte une couche fine de fonctionnalités d'application Web fondamentales, sans masquer les fonctionnalités de Node.js que vous connaissez et appréciez.

Page 31: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

31

Formation NodeJS, avancé alphorm.com™©

Installation• Allez dans ‘FR_260_02_02/Cours/hello_word’

• Créer un projet NodeJS : npm init

• Puis installer express : npm install --save express

Page 32: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

32

Formation NodeJS, avancé alphorm.com™©

Hello word

Let’s code

Cours : ‘FR_260_02_02/Cours/hello_word/index.js’

Page 33: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

33

Formation NodeJS, avancé alphorm.com™©

Le ‘Generator’• Le generator est un outil pour créer un squelette rapidement.

• Dans ‘FR_260_02_02/Cours/’

• Installer le generator : $> npm install express-generator –g

• Générer un projet : $> express myapp

• Aller dans le projet : $> cd myapp

• Installer les modules nécessaires : $> npm install

• Lancer le projet : $> DEBUG=myapp:* npm start

Page 34: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

34

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment créer un projet Express

� Comment créer un serveur HTTP très light

� Comment générer un squelette pour express

• Prochaine vidéo :

� Express : Router les requêtes

Page 35: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

35

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Express : Router les requêtes

Node et le Web

Page 36: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

36

Formation NodeJS, avancé alphorm.com™©

Plan

• Qu’est-ce qu’une route ?

• Comment définir une route avec Express ?

Page 37: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

37

Formation NodeJS, avancé alphorm.com™©

Qu’est-ce qu’une route ?• Une route est un ‘path’ contenu dans une URL :

� http://example.com/users

� http://example.com/contats

� http://example.com/user/eferrari

� http://example.com/user/eferrari/contacts

Page 38: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

38

Formation NodeJS, avancé alphorm.com™©

Comment définir une route avec Express ?

app.METHOD(PATH, HANDLER)

• On peut définir une route telle quelle :

� App est l’instance d’Express

� METHOD est une méthode de requête HTTP

� PATH est la route définie

� HANDLER est la fonction qui sera appelée.

• Cours : ‘FR_260_02_03/Cours/routes/routes_basiques.js’

Page 39: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

39

Formation NodeJS, avancé alphorm.com™©

Comment définir une route avec Express ?• Il est possible de mettre des regex dans le path.

• Cours : ‘FR_260_02_03/Cours/routes/routes_regex.js’

Page 40: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

40

Formation NodeJS, avancé alphorm.com™©

Comment définir une route avec Express ?• Il est possible de chainer les routes.

• Cours : ‘FR_260_02_03/Cours/routes/routes_chainées.js’

Page 41: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

41

Formation NodeJS, avancé alphorm.com™©

Comment définir une route avec Express ?• Il est possible de créer des modules pour mieux architecturer notre

projet avec la class express.Router.

• Cette classe est une instance complétée avec les middlewares et son système de routing. Dans la doc, on peut le retrouver comme appelléune “mini-app”.

• Cours : ‘FR_260_02_03/Cours/routes/routes_miniapp.js’

Page 42: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

42

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Ce qu’était une route.

� Comment définir une route avec Express de plusieurs façons.

• Prochaine vidéo :

� Express : Le gestionnaire de route

Page 43: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

43

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Express : Le gestionnaire des routes

Node et le Web

Page 44: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

44

Formation NodeJS, avancé alphorm.com™©

Plan

• Le gestionnaire des routes

• Exemple

Page 45: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

45

Formation NodeJS, avancé alphorm.com™©

Le gestionnaire des routes• Avec le gestionnaire, on peut fournir plusieurs callback.

• À la fin de chaque fonction, on appelle ‘next()’

• On peut utiliser ce mécanisme pour imposer une précondition sur uneroute (Authentification, Autorisation …)

• Le gestionnaire peut être une fonction, un tableau de fonction, ou les deux.

Page 46: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

46

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s code

Cours : ‘FR_260_02_04/Cours/gestionnaire_de_route.js’

Page 47: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

47

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comme nous pouvions gérer les conditions à l’appel d’une route

• Prochaine vidéo :

� Express : Les fichiers statiques

Page 48: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

48

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Express : Les fichiers statiques

Node et le Web

Page 49: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

49

Formation NodeJS, avancé alphorm.com™©

Plan

• Comment les fichiers statiques sont gérés ?

• Exemple

Page 50: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

50

Formation NodeJS, avancé alphorm.com™©

Comment les fichiers statiques sont gérés ?• Pour servir les fichiers statiques tels que les fichiers CSS ou JS, il faut

faire appel à ‘express.static’

• Il est possible de définir plusieurs répertoires statiques.

• De plus, nous pouvons définir un répertoire statique dans un cheminvirtuel.

app.use(express.static('public'));

app.use(express.static('public'));

app.use(express.static('files'));

app.use('/static', express.static('public'));

Page 51: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

51

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s code

Cours : ‘FR_260_02_05/Cours/*’

Page 52: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

52

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment gérer les fichiers statiques

• Prochaine vidéo :

� Express : Ecrire un middleware

Page 53: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

53

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Express : Ecrire un middleware

Node et le Web

Page 54: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

54

Formation NodeJS, avancé alphorm.com™©

Plan

• Qu’est-ce qu’un middleware ?

• L’ordre des fonctions

• Les différentes possibilités des middlewares

Page 55: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

55

Formation NodeJS, avancé alphorm.com™©

Qu’est-ce qu’un middleware ?• Express est une infrastructure web de routage.

• Il y a peu de fonctionnalités présentes par défaut.

• Une application développée avec Express, n’est ni plus ni moins qu’une succession d’appels de fonctions middleware.

• Un middleware est une fonction qui a 3 arguments :

� req : Classe “Request”, contient les informations de la requête

� res : Classe “Response”, permet de forger la réponse

� next : fonction middleware, qui appelle le middleware suivant

Page 56: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

56

Formation NodeJS, avancé alphorm.com™©

Qu’est-ce qu’un middleware ?• Les fonctions middleware effectuent les tâches suivantes :

� Exécuter tout type de code.

� Apporter des modifications aux objets de demande et de réponse.

� Terminer le cycle de demande-réponse.

� Appeler le middleware suivant dans la pile.

• Attention : Une fonction middleware doit appeler la fonction next() pour transmettre le contrôle à la fonction middleware suivante. Sinon, la demande restera bloquée.

• Cours : ‘FR_260_02_06/Cours/middleware_logger.js’

Page 57: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

57

Formation NodeJS, avancé alphorm.com™©

L’ordre des fonctions• L’ordre des fonctions est très important.

• Une fois qu’une fonction middleware finit le cycle, toutes les fonctionsqui se trouvent après ne seront pas appelées.

• Cours : ‘FR_260_02_06/Cours/middleware_logger.js’

Page 58: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

58

Formation NodeJS, avancé alphorm.com™©

Les différentes possibilités des middlewares• Il est possible de transmettre stocker des informations dans request ou

response.

• Par exemple pour :

� Récupérer plus d'information sur le serveur (header)

� Ajouter des éléments nécessaires à la réponse

� Faire un middleware d'authentification (Oauth, ...)

� Utiliser un moteur de modèle

� Parse un body d'une requête POST

� ...

• Cours : ‘FR_260_02_06/Cours/middleware_time.js’

Page 59: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

59

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Qu’est ce qu’était un middleware

� Nous avons pu voir comprendre comment Express fonctionne.

� Les différentes possibilités offertes par les middlewares

• Prochaine vidéo :

� Express : Les moteurs de template

Page 60: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

60

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Express : Les moteurs de template

Node et le Web

Page 61: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

61

Formation NodeJS, avancé alphorm.com™©

Plan

• Intégrer un moteur de template

• Consolidate.js : Intégration dans Express

Page 62: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

62

Formation NodeJS, avancé alphorm.com™©

Intégrer un moteur de template• Un moteur de template permet de générer du code HTML à partir d'un

code plus simple.

• On peut y intégrer des variables et des objets, ce qui permet de rendre le template "dynamique".

• Le template est le squelette de la page.

• Suivant les données que nous recevons du Model (db, api, etc), le moteur de template va compléter le template et générer de l'HTML.

• Avec Express, on utilise beaucoup Jade.

• Cours : ‘FR_260_02_06/Cours/express_jade.js’

Page 63: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

63

Formation NodeJS, avancé alphorm.com™©

Consolidate.js : Intégration dans Express• Consolidate.js rassemble énormément de moteurs de template :

� atpl

� doT.js (website)

� dust (unmaintained) (website)

� …

• Cours : ‘FR_260_02_06/Cours/express_consolidate.js’

Page 64: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

64

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Qu’elle est l’utilité d’un moteur de template.

� Comment l’utiliser et comment envoyer des variables au template.

• Prochaine vidéo :

� Side project : ChatWithMe

Page 65: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

65

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Side project : ChatWithMe

Node et le Web

Page 66: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

66

Formation NodeJS, avancé alphorm.com™©

Plan

• Créer le projet avec Express

• Créer un projet sur github

• Lier le projet sur github

• Initialiser NPM

• Copier le code

Page 67: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

67

Formation NodeJS, avancé alphorm.com™©

Hello word

Let’s code

Page 68: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

68

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Nous avons une bonne base pour commencer le développement de

notre application !

• Prochain chapitre :

� L’asynchrone en détail

Page 69: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

69

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Callback Hell & Pyramid of Doom

L’asynchrone en détail

Page 70: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

70

Formation NodeJS, avancé alphorm.com™©

Plan

• Pyramid of doom

• Callback hell

• Comment éviter les pièges ?

Page 71: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

71

Formation NodeJS, avancé alphorm.com™©

Pyramid of doom• La pyramide de la malediction

• C’est le fait d’enchainer les blocks en cascade

Page 72: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

72

Formation NodeJS, avancé alphorm.com™©

Callback hell• En JavaScript, quand une tâche est faite, la callback définie est appelée

• On peut rapidement arriver à un code comme ci-dessous:

Page 73: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

73

Formation NodeJS, avancé alphorm.com™©

Comment éviter les pièges ?• Nommer les fonctions anonymes

� Le code est plus simple à lire

� Quand une exception arrive, les fonctions dans la stacktrace seront nommées

• Garder le code peu profond

• Modulariser !

� Node permet de créer des modules très facilement, profitez s'en !

� Issac Schlueter "Ecrire de petits modules qui font qu'une seule chose, puis les assembler dans d'autres modules qui feront de plus grande chose. Vous ne pouvez pas entrer dans l'enfer rappel si vous n'y allez pas."

Page 74: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

74

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s code

Exercices: ‘FR_260_03_00/Exercice/code_sale.js’Corrigé: ‘FR_260_03_00/Exercice/code_sale_corrigé.js’

Page 75: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

75

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Quelles sont les plus gros pièges de JavaScript et de NodeJS

• Prochaine vidéo :

� Async : Cours

Page 76: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

76

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Async : Cours

L’asynchrone en détail

Page 77: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

77

Formation NodeJS, avancé alphorm.com™©

Plan

• Qu’est-ce que Async ?

• Exemples

Page 78: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

78

Formation NodeJS, avancé alphorm.com™©

Qu’est-ce que async ?• API : https://github.com/caolan/async

• Async est un module communautaire qui fournit de simple et de puissantes fonctions pour travailler avec les fonctions JS asynchrones.

• Async gère 3 categories :

� Les collections

� Le control Flow

� Utils

Page 79: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

79

Formation NodeJS, avancé alphorm.com™©

Exemples

Cours: ‘FR_260_03_01/Cours/’

Page 80: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

80

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s code

Cours: ‘FR_260_03_00/Cours/code_sale.js’

Page 81: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

81

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Les principaux usages de async

• Filter

• Map

• Parallel

• Serie

• waterfall

• Prochaine vidéo :

� Async : Exercices

Page 82: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

82

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Async : ExercicesPartie 1

L’asynchrone en détail

Page 83: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

83

Formation NodeJS, avancé alphorm.com™©

Plan

• Async-you

� Waterfall

� Series objects

� Each

� Map

Page 84: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

84

Formation NodeJS, avancé alphorm.com™©

Async-you• Async-you est un programme intéractif qui corrigera automatiquement

vos exercices.

• Tous les exercices sont traduits en francais.

• Je commenterai moi-même le code corrigé

• Pour installer :

� $> npm install –g async-you

• Pour lancer :

� $> async-you

• Changer la langue en Francais, si vous le désirez

Page 85: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

85

Formation NodeJS, avancé alphorm.com™©

Async-you

Let’s code

Exercices: ‘FR_260_03_02/Exercices/’

Page 86: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

86

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Les principaux usages de async

• Waterfall

• Serie

• Each

• Map

• Prochaine vidéo :

� Async : Exercices Partie 2

Page 87: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

87

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Async : ExercicesPartie 2

L’asynchrone en détail

Page 88: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

88

Formation NodeJS, avancé alphorm.com™©

Plan

• Async-you

� Times

� Reduce

� Whilst

Page 89: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

89

Formation NodeJS, avancé alphorm.com™©

Async-you

Let’s code

Exercices: ‘FR_260_03_02/Exercices/’

Page 90: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

90

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Les principaux usages de async

• Times

• Reduce

• whilst

• Prochaine vidéo :

� Les promesses avec Q: Les fondamentaux

Page 91: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

91

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Les promesses avec Q : Les fondamentaux

L’asynchrone en détail

Page 92: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

92

Formation NodeJS, avancé alphorm.com™©

Plan

• Qu’est-ce que sont les promesses?

• Module Q

• Installation de Q

• Faire une promesse basée sur une tâche

• Chainer les actions

Page 93: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

93

Formation NodeJS, avancé alphorm.com™©

Qu’est-ce que “Promise” ?• Promise en anglais

• Les promises fournissent une alternative aux callbacks lorsqu’on traiteun code asynchrone.

• Une promesse est une abstraction pour la programmation asynchrone.

• C’est un objet qui proxifie une valeur de retour ou une exception renvoyée par une fonction qui doit faire un traitement asynchrone.

• Malheureusement, la compréhension des promesses n’est pas facile.

Page 94: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

94

Formation NodeJS, avancé alphorm.com™©

Module Q• Il existe plusieurs interprétations des promesses.

• Les promesses sont intégrées dans ECMAscript6

• API : https://github.com/kriskowal/q

• Cours: ‘FR_260_03_03/Cours/introduction.js’

Page 95: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

95

Formation NodeJS, avancé alphorm.com™©

Installation de Q• Avec nodeJS

� $> npm install q

• Coté client, avec un navigateur web

� <script src="q.min.js"></script>

Page 96: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

96

Formation NodeJS, avancé alphorm.com™©

Faire une promesse basée sur une tache

Let’s code

Cours: ‘FR_260_03_03/Cours/premiere_promesse.js’

Page 97: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

97

Formation NodeJS, avancé alphorm.com™©

Chainer les actions

Let’s code

Cours: ‘FR_260_03_03/Cours/chainer_les_actions.js’

Page 98: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

98

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Les principaux usages des promesses avec Q

� Comment créer une promesse

� Comment chainer plusieurs actions

• Prochaine vidéo :

� Les promesses avec Q : les conditions et les boucles

Page 99: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

99

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Les promesses avec Q : Les conditions et les

boucles

L’asynchrone en détail

Page 100: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

100

Formation NodeJS, avancé alphorm.com™©

Plan

• Utilisation de condition dans une promesse

• Utilisation de boucle avec une promesse

Page 101: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

101

Formation NodeJS, avancé alphorm.com™©

Utilisation de condition dans une promesse

Let’s code

Cours: ‘FR_260_03_05/Cours/condition.js’

Page 102: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

102

Formation NodeJS, avancé alphorm.com™©

Utilisation d’une boucle avec une promesse

Let’s code

Cours: ‘FR_260_03_05/Cours/boucle.js’

Page 103: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

103

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment gérer les conditions et les boucles

• Prochaine vidéo :

� Les promesses avec Q : la gestions des erreurs

Page 104: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

104

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Les promesses avec Q : La gestion des erreurs

et les accès directs

L’asynchrone en détail

Page 105: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

105

Formation NodeJS, avancé alphorm.com™©

Plan

• La gestion des erreurs avec Q

• Gestion des objets avec les méthodes

Page 106: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

106

Formation NodeJS, avancé alphorm.com™©

La gestion des erreurs avec Q• Q inclut une gestion “standard” des erreurs

• La fonction then peut prendre deux arguments, le second argument estune fonction anonyme qui sera appelée si une erreur intervient

• De plus avec deferred, on peut appeler .reject(arg en erreur).

• En plus des .then(), on peut ajouter un .fail() qui récupérera les erreursnon traitées.

• Cours: ‘FR_260_03_06/Cours/erreurs.js’

Page 107: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

107

Formation NodeJS, avancé alphorm.com™©

Gestion des objets avec les méthodes• Il est possible d'utiliser des méthodes de Q qui vont vous permettre de

manipuler les données lors du flow des promesses.

• C'est un gain de temps

• Permettra de rendre votre code encore plus clair et concis.

• Cours: ‘FR_260_03_06/Cours/manipulation_object.js’

Page 108: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

108

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment gérer les erreurs

� Comment accéder en direct à certaines fonctions de Q

• Prochaine vidéo :

� Les promesses avec Q : Flow, Timers et I/O

Page 109: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

109

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Les promesses avec Q : Flow, Timers et I/O

L’asynchrone en détail

Page 110: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

110

Formation NodeJS, avancé alphorm.com™©

Plan

• Composer un flow

• Les timers

• Les modules I/O

Page 111: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

111

Formation NodeJS, avancé alphorm.com™©

Composer un flow• Les promesses de base supportent seulement un seul flow à la fois. Q permet de

gérer plusieurs flow.

• Imaginons, nous avons deux flow :

� Un qui fait une requête

� Un qui log la tâche

• Grâce à Q, il est possible de regrouper plusieurs promesses distinctes sous une "grosse" promesse.

• Si un des deux flow a une erreur, l'autre tâche est quand même exécutée

• Si une des sous-promesses est en erreur, toutes les promesses sont arrêtées et mises en "fail".

• Cours: ‘FR_260_03_07/Cours/composer_un_flow.js’

Page 112: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

112

Formation NodeJS, avancé alphorm.com™©

Les timers• Les promesses ont deux systèmes de contrôle de temps :

� .delay(ms)

� .timeout(ms)

• Cours: ‘FR_260_03_07/Cours/timers.js’

Page 113: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

113

Formation NodeJS, avancé alphorm.com™©

Les modules I/O• Q nous propose des fonctions qui permettent de faire appel à des

fonctions des modules I/O :

� Q.nfapply(func, args)

� Q.nfcall(func, arg1, arg2, ...)

� Q.nfbind(func, arg1, arg2,...)

� Q.npost(obj, name, args)

� Q.nsend(obj, name, arg1, arg2, ...)

• Ne fonctionne pas avec le module HTTP

• Cours: ‘FR_260_03_07/Cours/module_io.js’

Page 114: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

114

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment composer un flow complex

� Comment utiliser les timers

� Comment utiliser les modules I/O

• Prochaine vidéo :

� Les promesses : Exercices Partie 1

Page 115: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

115

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Les promesses : Exercices Partie 1

L’asynchrone en détail

Page 116: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

116

Formation NodeJS, avancé alphorm.com™©

Plan

• promise-it-wont-hurt

� Accomplir une promesse

� Rejeter une promesse

� Rejet ou ne pas rejeter

� Toujours asynchrones

� Valeurs et promesses

� Lever une erreur

Page 117: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

117

Formation NodeJS, avancé alphorm.com™©

promise-it-wont-hurt • Promise-it-wont-hurt est un programme intéractif qui corrigera

automatiquement vos exercices.

• Tous les exercices sont traduits en français.

• Je commenterai moi-même le code corrigé

• Pour installer :

� $> npm install –g promise-it-wont-hurt

• Pour lancer :

� $> promise-it-wont-hurt

• Changer la langue en Français, si vous le désirez

Page 118: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

118

Formation NodeJS, avancé alphorm.com™©

promise-it-wont-hurt

Let’s code

Exercices: ‘FR_260_03_08/Exercices/’

Page 119: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

119

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons revu les principaux usages des promises.

• Prochain chapitre :

� Les promesses : Exercices Partie 2

Page 120: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

120

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Les promesses : Exercices Partie 2

L’asynchrone en détail

Page 121: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

121

Formation NodeJS, avancé alphorm.com™©

Plan

• promise-it-wont-hurt

� Utiliser qfcall

� Une règle importante

� Promesses multiples

� Récurérer un JSON

� Faire plus de boulot

Page 122: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

122

Formation NodeJS, avancé alphorm.com™©

promise-it-wont-hurt

Let’s code

Exercices: ‘FR_260_03_09/Exercices/’

Page 123: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

123

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons revu les principaux usages des promises.

• Prochain chapitre :

� Communication temps réel

Page 124: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

124

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Socket.io

Communication temps réel

Page 125: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

125

Formation NodeJS, avancé alphorm.com™©

Plan

• Un peu d'histoire

• WebSocket

Page 126: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

126

Formation NodeJS, avancé alphorm.com™©

Un peu d'histoire• Avant, pour mettre à jour une information sur une page web :

• Tous les 5 minutes, nous mettons à jour nos données.

• C'est aussi efficace que le protocole "Transmission de datagramme IP par pigeons"

• http://www.rfc-editor.org/rfc/rfc1149.txt

Page 127: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

127

Formation NodeJS, avancé alphorm.com™©

Un peu d'histoire• Vu qu'on veut mettre à jour souvent, on baisse le rafraichissement

• En créant autant de requêtes, de nouveaux problèmes apparaissent :

� Si la requête HTTP met plus de 100 millisecondes, deux requêtes sont lancées parallèlement.

� Quand le serveur n'a pas de nouvelle donnée, ces requêtes sont toutes simplement de la consommation de ressource inutile.

Page 128: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

128

Formation NodeJS, avancé alphorm.com™©

Un peu d'histoire• Puis, nous utilisions le "long pooling"

• Cette technique garde la connexion ouverte jusqu‘à avoir une réponse serveur.

• Cela a permis de réduire considérablement la latence et la bande passante.

• C'est la méthode qui se rapproche le plus des WebSockets.

Page 129: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

129

Formation NodeJS, avancé alphorm.com™©

WebScocket• Les WebSocket permettent de fournir un mécanisme pour les

navigateurs qui ont besoin de communiquer

� Avec un navigateur

� Des deux sens (upload, download)

� et reste ouvert après avoir reçu les données

• Il est ajouté à partir du protocole HTTP/1.1

• Malgré ça, il reste deux problèmes majeurs :

� Le serveur de destination et tous les serveurs en relais (Cache, Reverse proxy, load balancer, ...) doivent savoir comment gérer ce protocole.

� Beaucoup d'ancien navigateur ne supporte pas ce protocole.

Page 130: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

130

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� A partir de quelle problèmatique les websocket et socket.io ont été créés

� Une rapide overview du protocole websocket.

• Prochaine vidéo :

� Intégration dans Express

Page 131: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

131

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Intégration à Express

Communication temps réel

Page 132: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

132

Formation NodeJS, avancé alphorm.com™©

Plan

• Ajouter le code côté serveur

• Ajouter le code côté client

• Side project : ChatWithMe

Page 133: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

133

Formation NodeJS, avancé alphorm.com™©

Cours

Ajouter le code côté serveurCours : ‘FR_260_04_01/Cours/’

Page 134: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

134

Formation NodeJS, avancé alphorm.com™©

Cours

Ajouter le code côté clientCours : ‘FR_260_04_01/Cours/’

Page 135: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

135

Formation NodeJS, avancé alphorm.com™©

Side project: ChatWithMe

• Intégrer socket.io dans ChatWithMe

• Side project : ‘ChatWithMe/’

Page 136: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

136

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu comment préparer un projet pour

socket.io

• Prochaine vidéo :

� Projet : ChatWithMe, le code backend

Page 137: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

137

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Side Project : ChatWithMe, le code

Backend

Communication temps réel

Page 138: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

138

Formation NodeJS, avancé alphorm.com™©

Plan

• Arborescence des objets et des Managers

• Liste des requêtes vers le backend

• Let’s code !

Page 139: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

139

Formation NodeJS, avancé alphorm.com™©

Arborescence des objets et des Managers

userManager User

RoomManager room

Message

Page 140: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

140

Formation NodeJS, avancé alphorm.com™©

Liste des requêtes backend• Liste des requêtes backend

• JoinRoom : Le user joins une room.

• QuitRoom : Le user quitte la room.

• SetName : Le user change de nom

• NewMessage : Le user écrit un nouveau message dans une room

Page 141: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

141

Formation NodeJS, avancé alphorm.com™©

Liste des requêtes backend• Quand l’utilisateur se connecte au serveur :

1. Le serveur transmet la liste des rooms à l’utilisateur.

• Quand l’utilisateur rejoint une room

1. La room avertit tous ses utilisateurs qu’un nouvel utilisateur est arrivé.

2. La room transmet tous ses informations au nouvel utilisateur.

• Quand un utilisateur écrit un message dans une room :

1. L’information est reçue dans l’objet user.

2. Transmets l’information à l’objet room.

3. L’objet room, transmet l’information à tous les utilisateurs.

Page 142: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

142

Formation NodeJS, avancé alphorm.com™©

ChatWithMe, le code Backend

Let’s codeSide project: ‘ChatWithMe/’

Page 143: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

143

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons développé le code backend pour les

requêtes suivantes :

� JoinRoom

� QuitRoom

� SetName

� NewMessage

• Prochaine vidéo :

� Side Project : ChatWithMe, le code frontend

Page 144: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

144

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Side Project : ChatWithMe, le code

Frontend

Communication temps réel

Page 145: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

145

Formation NodeJS, avancé alphorm.com™©

Plan

• Arborescence des fichiers

• Liste des requêtes vers le frontend

• Let’s code !

Page 146: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

146

Formation NodeJS, avancé alphorm.com™©

Arborescence des objets et des Managers

Realtime.js Room

Page 147: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

147

Formation NodeJS, avancé alphorm.com™©

Liste des requêtes backend• Liste des requêtes frontend :

� roomList : Une fois connecté, le serveur envoie la liste des rooms disponibles.

� joinRoom : Une fois que nous avons rejoint une room, on reçoit toutes les infos nécessaires à créer une nouvelle room.

� roomNewUser : Un nouveau user rentre dans une room.

� roomUsers : Si quelqu’un rentre ou sort de la room, on est averti par cette requête.

� roomMessages : Pas implémenté.

� roomNewMessage : Si un user écrit un message, on est averti par cette requête.

Page 148: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

148

Formation NodeJS, avancé alphorm.com™©

ChatWithMe, le code Front

Let’s codeSide project: ‘ChatWithMe/’

Page 149: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

149

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons développé le code frontend pour les

requêtes suivantes :

� joinRoom

� roomList

� roomUsers

� roomMessages

� roomNewMessage

� roomNewUser

• Prochain chapitre :

� Liaison avec la persistance des données

Page 150: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

150

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Intégration avec une base de données

relationnelle (Mysql)

Liaison avec la persistance des données

Page 151: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

151

Formation NodeJS, avancé alphorm.com™©

Plan

• Introduction à Mysql

• Mysql avec Cloud9

• Let’s code

Page 152: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

152

Formation NodeJS, avancé alphorm.com™©

Introduction à Mysql• MySQL est un système de gestion de bases de données relationnelles

(SGBDR).

• Formation complète sur Alphorm :

� http://www.alphorm.com/tutoriel/formation-en-ligne-mysql-1z0-883

• Savoir comment utiliser Node.JS et Mysql est plus que nécessaire.

• Mysql est une base de données la plus utilisée dans le monde et trèsperformante.

• Tous les langages ont développé un driver pour interagir avec Mysql.

Page 153: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

153

Formation NodeJS, avancé alphorm.com™©

Mysql avec Cloud9� $> mysql-ctl start

� $> mysql-ctl stop

� $> mysql-ctl cli

• Informations :

� Hostname – process.env.IP

� Port - 3306 (Port par défaut de Mysql)

� User – process.env.C9_USER

� Password - `` (Pas de mot de passe)

� Database - c9 (Le nom de la base de données)

Page 154: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

154

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s codeCours : ‘FR_260_05_00/Cours/’

Page 155: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

155

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment utiliser mysql avec NodeJs

• Prochaine vidéo :

� Sequelize, l’introduction

Page 156: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

156

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Sequelize, l’introduction

Liaison avec la persistance des données

Page 157: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

157

Formation NodeJS, avancé alphorm.com™©

Plan

• Qu’est ce qu’un ORM ?

• Sequelize

• Let’s code

Page 158: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

158

Formation NodeJS, avancé alphorm.com™©

Qu’est-ce qu’un ORM• Un mapping objet-relationnel (en anglais object-relational

mapping ou ORM)

• C’est une technique de programmation informatique qui crée l'illusion d'une base de données orientée objet à partir d'une base de données relationnelle.

• L’ORM définit des correspondances entre cette base de données et les objets du langage utilisé.

• On pourrait le désigner par :

� « correspondance entre monde objet et monde relationnel »

Page 159: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

159

Formation NodeJS, avancé alphorm.com™©

Sequelize• Sequelize est un ORM basé sur les promesses pour NodeJS

• http://docs.sequelizejs.com/en/latest/

• Il supporte les bases de données suivantes :

� PostgreSQL

� MySQL

� MariaDB

� SQLite

� MSSQL

• Et des fonctionnalités de transaction, relations, read replication, …

Page 160: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

160

Formation NodeJS, avancé alphorm.com™©

Sequelize• La première chose à faire est de définir les modèles

• Sequelize, nous permet de définir les champs que nous utiliserons.

� http://docs.sequelizejs.com/en/latest/docs/models-definition/

Page 161: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

161

Formation NodeJS, avancé alphorm.com™©

Sequelize• De plus, Sequelize fonctionne avec les promises.

• Cela ne fonctionne pas !

• Ce qu’il faut faire :

Page 162: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

162

Formation NodeJS, avancé alphorm.com™©

Let’s code• Maintenant, nous allons voir les grandes utilisations de Sequelize:

� La configuration

� La création de tables

� L’insertion de données

� Comment retrouver ses données

• Cours : ‘FR_260_05_01/Cours/’

Page 163: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

163

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment utiliser sequelize

� Comment éviter les pièges

� Et partir sur de bonne base

• Prochaine vidéo :

� Sequelize, les associations

Page 164: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

164

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Sequelize, les associations

Liaison avec la persistance des données

Page 165: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

165

Formation NodeJS, avancé alphorm.com™©

Plan

• Les différents types de liaison

• Let’s code

Page 166: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

166

Formation NodeJS, avancé alphorm.com™©

Les différents types de liaison• Avec les ORMs, il existe plusieurs types de liaison.

• Les One-to-One

� BelongsTo: “Appartient à”, un Post appartient à un User.

� HasOne: “à un” object

� HasMany: “à plusieurs” object, un User peut avoir plusieurs Post.

� …

• http://docs.sequelizejs.com/en/latest/docs/associations/

Page 167: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

167

Formation NodeJS, avancé alphorm.com™©

Les différents types de liaison• Les associations vont nous permettre de lier les données

• Par exemples, deux tables :

� Users (id, firstname, lastname)

� Users-Posts (id, userId, subject, content)

Page 168: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

168

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s codeCours : ‘FR_260_05_02/Cours/association.js’

Page 169: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

169

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment faire des associations de table

• Prochaine vidéo :

� Interaction avec une base de données NoSQL : Redis

Page 170: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

170

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Interaction avec une base de données

NoSQL : Redis

Liaison avec la persistance des données

Page 171: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

171

Formation NodeJS, avancé alphorm.com™©

Plan

• Introduction à Redis

• Redis avec Cloud9

• Let’s code

Page 172: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

172

Formation NodeJS, avancé alphorm.com™©

Introduction à Redis• Redis (de l'anglais REmote DIctionary Server qui peut être traduit par «

serveur de dictionnaire distant » et jeu de mots avec Redistribute).

• C’est un système de gestion de bases de données clef-valeur scalable, très hautes performances, écrit avec le langage de programmation C.

• Il fait partie du mouvement NoSQL et vise à fournir les performances les plus élevées possibles.

� http://redis.io/commands

Page 173: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

173

Formation NodeJS, avancé alphorm.com™©

Redis avec Cloud9• Pour lancer le serveur

� $> sudo service redis-server start

• Pour se connecter au serveur

� $> redis-cli

Page 174: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

174

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s codeCours : ‘FR_260_05_03/Cours/’

Page 175: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

175

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment utiliser redis avec NodeJs

• Prochaine vidéo :

� Interaction avec une base de données NoSQL : MongoDB, l’introduction

Page 176: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

176

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Intégration avec une base de données NoSQL :

MongoDB, l’introduction

Liaison avec la persistance des données

Page 177: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

177

Formation NodeJS, avancé alphorm.com™©

Plan

• Introduction à MongoDB

• MongoDB avec Cloud9

• CRUD

Page 178: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

178

Formation NodeJS, avancé alphorm.com™©

Introduction à MongoDB• MongoDB de l'anglais humongous qui peut être traduit par « énorme »

• C’est un système de gestion de bases de données :

� Orientée documents.

� Répartissable sur un nombre quelconque d'ordinateurs.

� Ne nécessitant pas de schémas prédéfinis des données.

• Il est écrit en C++.

• Il fait partie du mouvement NoSQL.

Page 179: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

179

Formation NodeJS, avancé alphorm.com™©

MongoDB avec Cloud9• Pour lancer le serveur

� $> mongod --nojournal

• Pour se connecter au serveur

� $> mongo

Page 180: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

180

Formation NodeJS, avancé alphorm.com™©

CRUD• Nous allons voir les principales utilisations de mongodb avec

mongoose.

� Create : ‘FR_260_05_05/Cours/create.js’

� Read: ‘FR_260_05_05/Cours/read.js’

� Update: ‘FR_260_05_05/Cours/update.js’

� Delete: ‘FR_260_05_05/Cours/delete.js

Page 181: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

181

Formation NodeJS, avancé alphorm.com™©

Pour aller plus loi• Une formation complète sur Mongodb sur Alphorm :

http://www.alphorm.com/tutoriel/formation-en-ligne-mongodb-administration

Page 182: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

182

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment utiliser MongoDB avec mongoose.

• Prochaine vidéo :

� Interaction avec une base de données NoSQL : MongoDB, les associations

Page 183: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

183

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Intégration avec une base de données NoSQL :

MongoDB, les associations

Liaison avec la persistance des données

Page 184: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

184

Formation NodeJS, avancé alphorm.com™©

Plan

• Les associations

• Let’s code

Page 185: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

185

Formation NodeJS, avancé alphorm.com™©

Les associations• De la même façon qu’avec MySQL, nous allons lier les users et les posts.

Page 186: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

186

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s codeCours : ‘FR_260_05_05/Cours/associate.js’

Page 187: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

187

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment faire des associations de documents avec MongoDb

• Prochaine vidéo

� Intégration de MySQL à ChatWithMe

Page 188: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

188

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Intégration de MySQL à ChatWithMe

Liaison avec la persistance des données

Page 189: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

189

Formation NodeJS, avancé alphorm.com™©

Plan

•Let’s code

Page 190: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

190

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s codeSide project: ‘ChatWithMe’

Page 191: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

191

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons intégré Mysql à ChatWithMe

• Prochaine vidéo

� Intégration de Sequelize à ChatWithMe

Page 192: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

192

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Intégration de Sequelizeà ChatWithMe

Liaison avec la persistance des données

Page 193: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

193

Formation NodeJS, avancé alphorm.com™©

Plan

•Let’s code

Page 194: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

194

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s codeSide project: ‘ChatWithMe’

Page 195: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

195

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons intégré Sequelize à ChatWithMe

• Prochaine vidéo

� Intégration de MongoDB à ChatWithMe

Page 196: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

196

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Intégration de MongoDBà ChatWithMe

Liaison avec la persistance des données

Page 197: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

197

Formation NodeJS, avancé alphorm.com™©

Plan

•Let’s code

Page 198: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

198

Formation NodeJS, avancé alphorm.com™©

Exemple

Let’s codeSide project: ‘ChatWithMe’

Page 199: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

199

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons intégré Mysql à ChatWithMe

• Prochaine chapitre

� Intégration de Sequelize à ChatWithMe

Page 200: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

200

Formation NodeJS, avancé alphorm.com™©

PM2, le monitoring

Bonus

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Page 201: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

201

Formation NodeJS, avancé alphorm.com™©

Plan• Qu’est ce que PM2 ?

• La gestion d’un processus

• Les actions sur le processus

• Les logs

• Lancer un processus avec des arguments

• Les limites

Page 202: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

202

Formation NodeJS, avancé alphorm.com™©

Qu’est ce que PM2 ? • PM2 est un gestionnaire de processus de production pour les

applications Node.js avec un load balancer intégré.

• Il permet de garder les applications vivantes et les redémarrera si un problème intervient.

• Il permet aussi de recharger le code de l’application sans couper les files de description (Reload à chaud)

• https://github.com/Unitech/pm2

• Installation :

� $> npm install –g pm2

Page 203: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

203

Formation NodeJS, avancé alphorm.com™©

La gestion d’un processus• Démarrer le processus :

� $> pm2 start bin/www

� $> pm2 start bin/www --name ChatWithMe

• PM2 permet de démarer le processus en cluster mode, cela permettra de profiter de l'ensemble des processus de la machine.

� $> pm2 start bin/www -i 0 # démarre avec autant de processus que de processeur.

• Pour lister les processus

� $> pm2 list

Page 204: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

204

Formation NodeJS, avancé alphorm.com™©

La gestion d’un processus• Afficher plus d'informations sur un processus en particulier

� $> pm2 describe 0

• Monitorer les process lancés

� $> pm2 monit

• Retire un processus de la liste

� $> pm2 delete 0

� $> pm2 delete all

Page 205: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

205

Formation NodeJS, avancé alphorm.com™©

Les actions sur le processus• Différente actions :

� $> pm2 stop all # Stop tous les processus

� $> pm2 restart all # Restart tous les processus

� $> pm2 reload all # Redémarrer un processus sans aucun downtime

� $> pm2 gracefulReload all # Stop un processus, puis le relance

� $> pm2 stop 0 # Stop un processus spécifique

� $> pm2 restart 0 # Restart un processus spécifique

Page 206: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

206

Formation NodeJS, avancé alphorm.com™©

Les logs• Gérer les logs

� $> pm2 logs [--raw] # Affiche tous les logs

� $> pm2 flush # Vide tous les logs

Page 207: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

207

Formation NodeJS, avancé alphorm.com™©

Lancer une processus avec des arguments• Démarrer un processus avec des arguments

� $> pm2 start app.js -- -a 23 # Passe l'argument '-a 23' à app.js

• Spécifier les logs explicitement

� $> pm2 start app.js -e err.log -o out.log

Page 208: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

208

Formation NodeJS, avancé alphorm.com™©

Les limites• Le module cluster de NodeJS ne permet pas de faire fonctionner

socket.io

• https://github.com/elad/node-cluster-socket.io

• Vu que PM2 utilise le module natif pour les clusters, PM2 ne supporte pas non plus les socket.io.

Page 209: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

209

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Un projet de monitoring de processus NodeJS pour une mise en production !

� Lancer en cluster un processus

� Gérer les logs

• Prochaine vidéo :

� Keymetrics, la supervision

Page 210: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

210

Formation NodeJS, avancé alphorm.com™©

Keymetrics, la supervision

Bonus

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Page 211: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

211

Formation NodeJS, avancé alphorm.com™©

Plan

• Qu’est-ce que Keymetrics ?

• Inscription

• Lien avec PM2

• Ajout de sondes

Page 212: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

212

Formation NodeJS, avancé alphorm.com™©

Qu’est-ce que Keymetrics ? • Keymetrics permet d'afficher des statistiques remontées par pm2

� https://keymetrics.io/

Page 213: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

213

Formation NodeJS, avancé alphorm.com™©

Inscription

• Inscription :

� https://app.keymetrics.io/#/login

Page 214: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

214

Formation NodeJS, avancé alphorm.com™©

Lien avec PM2

• Pour lier Keymetrics avec un PM2

� $> pm2 link xxxxxxxxxxx xxxxxxxxxx [hostname]

Page 215: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

215

Formation NodeJS, avancé alphorm.com™©

Ajouter des sondes• C’est le module pmx qui permet d’ajouter des sondes :

� npm install –save pmx

• Faire un wrapper (singleton) pour initialiser le module :

• Il existe 4 types de sondes :

� « Simple metics » : Remonte un nombre

� « Counter » : Incrémente et décrémente un nombre

� « Meter » : Remonte un nombre sur le temps, ex Nombre de requêtes par seconde.

� « Histogram » : Garde un réservoir de valeur sur les 5 dernières minutes

Page 216: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

216

Formation NodeJS, avancé alphorm.com™©

Exemple

Ajout de nouvelle sondeSide project : ‘ChatWithMe’

Page 217: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

217

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert• Dans cette vidéo, nous avons vu :

� Comment superviser un projet NodeJS

� Comment remonter certaines informations métier

• Prochain chapitre :

� La conclusion !

Page 218: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

218

Formation NodeJS, avancé alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.com

Édouard FERRARIFormateur et Consultant indépendantContact : [email protected]

Conclusion

Page 219: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

219

Formation NodeJS, avancé alphorm.com™©

Ce qu’on a couvert

1. Comment installer et mettre en place un Express1. Système de route2. Gestion des fichiers statiques3. Comment ajouter nos propres middlewares4. Comment utiliser un moteur de template

2. Deux différentes méthodes de développementasynchrone:

1. Async2. Les promesses avec Q

3. La communication en temps raille avec les clients (front-end) grâce à Socket.io

1. Comment sauvegarder des données en couvrant les bases de donnée suivante :

1. Mysql2. MariaDB3. SQLite4. Postgres5. MSSql6. Redis7. MongoDB

2. Développer un projet NodeJS en MVC.

3. Comment monitorer et superviser le projet avec PM2 et Keymetrics

Page 220: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

220

Formation NodeJS, avancé alphorm.com™©

Avez-vous des Questions / Remarques / Commentaires ?

Page 221: Alphorm.com Support de la formation NodeJS , avancé

10/03/2016

221

Formation NodeJS, avancé alphorm.com™©

A bientôt ☺

Keep in touch !

E-mail : [email protected]

Linkedin : https://fr.linkedin.com/in/edouardferrari

Twitter : https://twitter.com/edouard_ferrari

Alphorm : http://www.alphorm.com/formateur/edouard-ferrari