Vous êtes sur la page 1sur 221

10/03/2016

Formation
Avance de NodeJS

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

1
10/03/2016

Plan
Prsentation du formateur

Plan de formation

Objectifs de la formation

Public concern

Les possibilits de NodeJS

Les connaissances requises

Formation NodeJS, avanc alphorm.com

2
10/03/2016

Prsentation du formateur
Edouard FERRARI
contact@ferrari.wf

Dveloppeur full stack chez Summview

Mission de conseil, darchitecture et de migration

Mes rfrences :
LinkedIn : https://fr.linkedin.com/in/edouardferrari
Alphorm : http://www.alphorm.com/formateur/edouard-ferrari
Github : https://github.com/didouard

Formation NodeJS, avanc alphorm.com

3
10/03/2016

Plan de la formation
Prsentation de la formation Lasynchrone en dtail
Prsentation de la formation Callback Hell & Pyramid of Doom
Scnario de la formation Async : Cours

Node et le Web : HTTP, Request & Express Async : Correction d'exercice

Primtre du module HTTP Les promesses avec Q : Les fondamentaux


Request Les promesses avec Q : Gestion des erreurs et les accs
directs
Serveur Web avec Express
Les promesses avec Q : Flow, Timers et I/O
Express : Router les requtes
Express : Le gestionnaire de route Les promesses : Exercices

Express : les fichiers statiques


Communication temps rel
Express : Utiliser les middlewares
Socket.io
Express : Les moteurs de template
Intgration Express
Side Project : ChatWithMe
Projet : ChatWithMe Partie 1
Projet : ChatWithMe Partie 2

Formation NodeJS, avanc alphorm.com

4
10/03/2016

Plan de la formation
Liaison avec la persistance des donnes Bonus
Intraction avec une base de donnes relationnelle (Mysql) PM2, le monitoring
Sequelize, l'introduction Keymetric, la supervision
Sequelize, les associations
Conclusion
Intgration avec une base de donnes NoSQL : Redis
Intgration avec une base de donnes NoSQL : Mongo,
l'introduction
Intgration avec une base de donnes NoSQL : Mongo, les
associations
Intgration de MySQL ChatWithMe
Intgration de Sequelize ChatWithMe
Intgration de MongoDB ChatWithMe

Formation NodeJS, avanc alphorm.com

5
10/03/2016

Objectifs de la formation
Apprendre et comprendre les diffrentes mthodes asynchrones de
NodeJS.
Apprendre concevoir un projet important.

Comprendre comment fonctionne un des frameworks les plus utiliss


de NodeJS.
Mettre en place un systme MVC et une abstraction de base de
donnes.
Savoir dvelopper une application web dun niveau professionnel.

Formation NodeJS, avanc alphorm.com

6
10/03/2016

Public concern
qui sadresse cette formation :
Aux tudiants
Aux dveloppeurs
Aux chefs de projet
Aux amoureux des nouvelles technologies
Ceux qui veulent dcouvrir levent coding et lasynchrone
Ceux qui ont besoin dune architecture robuste, scalable et modulaire
Pour un projet orient Web ou pour un projet back

Les possibilits sont infinies et immenses !

Formation NodeJS, avanc alphorm.com

7
10/03/2016

Les possibilits de NodeJS


Serveur et site internet complexe

Application console

Service rseau sur mesure (Proxies, gestion rseau, )

Application avec GUI (Graphical User Interface)

Outils en ligne de commandes

APIs

Support des sockets

Chargement du code node au premier appel HTTP

Formation NodeJS, avanc alphorm.com

8
10/03/2016

Les connaissances requises


Au minimum :
Connaissance de base en Javascript
Autodidacte
Connaissance globale en programmation
Connaissance en rseau / internet
Connaissance en asynchrone
Connaissance en event-driven architecture
Bien connaitre les modules natifs de NodeJS

Formation NodeJS, avanc alphorm.com

9
10/03/2016

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/

Formation NodeJS, avanc alphorm.com

10
10/03/2016

Are you ready ?

Formation NodeJS, avanc alphorm.com

11
10/03/2016

Scnario
de la formation

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

12
10/03/2016

Plan
Formation

Side project : ChatWithMe

Formation NodeJS, avanc alphorm.com

13
10/03/2016

Formation
Cette formation est une seconde partie de la formation complte de
NodeJs, les fondamentaux.
Dans cette seconde partie, nous verrons ensemble :
Comment utiliser un des frameworks les plus utiliss de NodeJS : Express
Deux mthodes de code asynchrone.
Comment communiquer du code JavaScript ct client (navigateur web)
Comment sauvegarder nos donnes dans des bases de donnes ou dans des
fichiers

En plus, dans cette formation, nous dvelopperons une plateforme web


sur le modle MVC et avec une abstraction de base de donne.

Formation NodeJS, avanc alphorm.com

14
10/03/2016

Side Project : ChatWithMe


partir dun squelette, nous allons dvelopper une base solide dun
chat.
Nous dvelopperons par tape
1. Le serveur web.
2. La communication en temps rel avec le navigateur.
3. La sauvegarde des donnes.
4. Le monitoring de lapplication

Libre vous damliorer ce projet aprs cette formation.

Formation NodeJS, avanc alphorm.com

15
10/03/2016

Ce quon a couvert
Les cours, les exercices et le side-project sont complmentaires.

Nous allons voir beaucoup de code.

Vous pouvez tlcharger toutes les sources dans votre espace


utilisateur sur Alphorm.com

Prochain chapitre:
Node et le Web : HTTP, Request & Express

Formation NodeJS, avanc alphorm.com

16
10/03/2016

Node et le Web
Primtre
du module HTTP

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

17
10/03/2016

Plan
Rappel

Une requte HTTP (partie client)

Un serveur HTTP (partie serveur)

Formation NodeJS, avanc alphorm.com

18
10/03/2016

Rappel
Le module HTTP permet de :
Crer un client pour interagir avec un serveur HTTP.
Crer soit mme un serveur HTTP.
Manipuler les headers et user-agents

Ce module est une surcouche au module NET.

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

Formation NodeJS, avanc alphorm.com

19
10/03/2016

Une requte HTTP (partie client)


Crons notre premier script pour envoyer une requte avec http

Dans FR_260_02_00/Exercices/
Faire un script qui se connectera lURL https://httpbin.org/get en GET
Faire un script qui se connectera lURL 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
Formation NodeJS, avanc alphorm.com

20
10/03/2016

Un serveur HTTP (partie serveur)


Dans FR_260_02_00/Exercices/

Dvelopper un serveur HTTP et grer diffremment les requtes GET et


POST
Bonus : Grer deux routes diffrentes :
http://localhost:12000/users
http://localhost:12000/media

Correction : FR_260_02_00/Exercices/exercice_server_http_corrig.js

Formation NodeJS, avanc alphorm.com

21
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Un rapide rappel de NodeJS
Comment lancer une requte HTTP avec le module natif.
La difficult de crer un serveur HTTP avec le module natif.

Dans la prochaine vido, nous verrons le module Request, qui est une
abstraction des modules natifs HTTP/HTTPS, et qui prend en charge
normment de fonctionnalits.

Formation NodeJS, avanc alphorm.com

22
10/03/2016

Node et le Web
Request

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

23
10/03/2016

Plan
Le module Request

Les requtes HTTP(s)

Formation NodeJS, avanc alphorm.com

24
10/03/2016

Le module Request
Le module Request est une abstraction de diffrents modules natifs de
NodeJs.
Il est design pour tre le plus simple possible dutilisation.

Supporte :
HTTP / HTTPS
Suit les redirections 2xx
Gre les requtes en event ou stream/pipe

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

Formation NodeJS, avanc alphorm.com

25
10/03/2016

Les requtes HTTP(s)


Crons notre premier script pour envoyer une requte avec request

Dans FR_260_02_01/Exercices/
Faire un script qui se connectera lURL https://httpbin.org/get en GET
Faire un script qui se connectera lURL 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
Formation NodeJS, avanc alphorm.com

26
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment lancer des requtes HTTP(s) avec request

Prochaine vido :
Serveur Web avec Express

Formation NodeJS, avanc alphorm.com

27
10/03/2016

Node et le Web
Serveur Web
avec Express

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

28
10/03/2016

Plan
Quest-ce quExpress ?

Installation

Hello word

le Generator

Formation NodeJS, avanc alphorm.com

29
10/03/2016

Quest-ce quExpress ?
Express est une infrastructure web minimaliste, souple et rapide pour
Node.JS
Express fournit un ensemble de fonctionnalits robustes pour les
applications web et mobiles.
Grce une foule de mthodes utilitaires HTTP et de middleware mise
votre disposition, la cration d'une API robuste est simple et rapide.
Express apporte une couche fine de fonctionnalits d'application Web
fondamentales, sans masquer les fonctionnalits de Node.js que vous
connaissez et apprciez.

Formation NodeJS, avanc alphorm.com

30
10/03/2016

Installation
Allez dans FR_260_02_02/Cours/hello_word

Crer un projet NodeJS : npm init

Puis installer express : npm install --save express

Formation NodeJS, avanc alphorm.com

31
10/03/2016

Hello word

Lets code

Cours : FR_260_02_02/Cours/hello_word/index.js

Formation NodeJS, avanc alphorm.com

32
10/03/2016

Le Generator
Le generator est un outil pour crer un squelette rapidement.

Dans FR_260_02_02/Cours/

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

Gnrer un projet : $> express myapp

Aller dans le projet : $> cd myapp

Installer les modules ncessaires : $> npm install

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

Formation NodeJS, avanc alphorm.com

33
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment crer un projet Express
Comment crer un serveur HTTP trs light
Comment gnrer un squelette pour express

Prochaine vido :
Express : Router les requtes

Formation NodeJS, avanc alphorm.com

34
10/03/2016

Node et le Web
Express :
Router les requtes

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

35
10/03/2016

Plan
Quest-ce quune route ?

Comment dfinir une route avec Express ?

Formation NodeJS, avanc alphorm.com

36
10/03/2016

Quest-ce quune 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

Formation NodeJS, avanc alphorm.com

37
10/03/2016

Comment dfinir une route avec Express ?


On peut dfinir une route telle quelle :
app.METHOD(PATH, HANDLER)

App est linstance dExpress


METHOD est une mthode de requte HTTP
PATH est la route dfinie
HANDLER est la fonction qui sera appele.

Cours : FR_260_02_03/Cours/routes/routes_basiques.js

Formation NodeJS, avanc alphorm.com

38
10/03/2016

Comment dfinir une route avec Express ?


Il est possible de mettre des regex dans le path.

Cours : FR_260_02_03/Cours/routes/routes_regex.js

Formation NodeJS, avanc alphorm.com

39
10/03/2016

Comment dfinir une route avec Express ?


Il est possible de chainer les routes.

Cours : FR_260_02_03/Cours/routes/routes_chaines.js

Formation NodeJS, avanc alphorm.com

40
10/03/2016

Comment dfinir une route avec Express ?


Il est possible de crer des modules pour mieux architecturer notre
projet avec la class express.Router.
Cette classe est une instance complte avec les middlewares et son
systme de routing. Dans la doc, on peut le retrouver comme appell
une mini-app.

Cours : FR_260_02_03/Cours/routes/routes_miniapp.js

Formation NodeJS, avanc alphorm.com

41
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Ce qutait une route.
Comment dfinir une route avec Express de plusieurs faons.

Prochaine vido :
Express : Le gestionnaire de route

Formation NodeJS, avanc alphorm.com

42
10/03/2016

Node et le Web
Express :
Le gestionnaire des routes

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

43
10/03/2016

Plan
Le gestionnaire des routes

Exemple

Formation NodeJS, avanc alphorm.com

44
10/03/2016

Le gestionnaire des routes


Avec le gestionnaire, on peut fournir plusieurs callback.

la fin de chaque fonction, on appelle next()

On peut utiliser ce mcanisme pour imposer une prcondition sur une


route (Authentification, Autorisation )
Le gestionnaire peut tre une fonction, un tableau de fonction, ou les
deux.

Formation NodeJS, avanc alphorm.com

45
10/03/2016

Exemple

Lets code

Cours : FR_260_02_04/Cours/gestionnaire_de_route.js

Formation NodeJS, avanc alphorm.com

46
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comme nous pouvions grer les conditions lappel dune route

Prochaine vido :
Express : Les fichiers statiques

Formation NodeJS, avanc alphorm.com

47
10/03/2016

Node et le Web
Express :
Les fichiers statiques

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

48
10/03/2016

Plan
Comment les fichiers statiques sont grs ?

Exemple

Formation NodeJS, avanc alphorm.com

49
10/03/2016

Comment les fichiers statiques sont grs ?


Pour servir les fichiers statiques tels que les fichiers CSS ou JS, il faut
faire appel express.static
app.use(express.static('public'));

Il est possible de dfinir plusieurs rpertoires statiques.


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

De plus, nous pouvons dfinir un rpertoire statique dans un chemin


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

Formation NodeJS, avanc alphorm.com

50
10/03/2016

Exemple

Lets code

Cours : FR_260_02_05/Cours/*

Formation NodeJS, avanc alphorm.com

51
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment grer les fichiers statiques

Prochaine vido :
Express : Ecrire un middleware

Formation NodeJS, avanc alphorm.com

52
10/03/2016

Node et le Web
Express :
Ecrire un middleware

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

53
10/03/2016

Plan
Quest-ce quun middleware ?

Lordre des fonctions

Les diffrentes possibilits des middlewares

Formation NodeJS, avanc alphorm.com

54
10/03/2016

Quest-ce quun middleware ?


Express est une infrastructure web de routage.

Il y a peu de fonctionnalits prsentes par dfaut.

Une application dveloppe avec Express, nest ni plus ni moins quune


succession dappels de fonctions middleware.
Un middleware est une fonction qui a 3 arguments :
req : Classe Request, contient les informations de la requte
res : Classe Response, permet de forger la rponse
next : fonction middleware, qui appelle le middleware suivant

Formation NodeJS, avanc alphorm.com

55
10/03/2016

Quest-ce quun middleware ?


Les fonctions middleware effectuent les tches suivantes :
Excuter tout type de code.
Apporter des modifications aux objets de demande et de rponse.
Terminer le cycle de demande-rponse.
Appeler le middleware suivant dans la pile.

Attention : Une fonction middleware doit appeler la fonction next() pour


transmettre le contrle la fonction middleware suivante. Sinon, la
demande restera bloque.
Cours : FR_260_02_06/Cours/middleware_logger.js

Formation NodeJS, avanc alphorm.com

56
10/03/2016

Lordre des fonctions


Lordre des fonctions est trs important.

Une fois quune fonction middleware finit le cycle, toutes les fonctions
qui se trouvent aprs ne seront pas appeles.
Cours : FR_260_02_06/Cours/middleware_logger.js

Formation NodeJS, avanc alphorm.com

57
10/03/2016

Les diffrentes possibilits des middlewares


Il est possible de transmettre stocker des informations dans request ou
response.
Par exemple pour :
Rcuprer plus d'information sur le serveur (header)
Ajouter des lments ncessaires la rponse
Faire un middleware d'authentification (Oauth, ...)
Utiliser un moteur de modle
Parse un body d'une requte POST
...

Cours : FR_260_02_06/Cours/middleware_time.js
Formation NodeJS, avanc alphorm.com

58
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Quest ce qutait un middleware
Nous avons pu voir comprendre comment Express fonctionne.
Les diffrentes possibilits offertes par les middlewares

Prochaine vido :
Express : Les moteurs de template

Formation NodeJS, avanc alphorm.com

59
10/03/2016

Node et le Web
Express :
Les moteurs de template

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

60
10/03/2016

Plan
Intgrer un moteur de template

Consolidate.js : Intgration dans Express

Formation NodeJS, avanc alphorm.com

61
10/03/2016

Intgrer un moteur de template


Un moteur de template permet de gnrer du code HTML partir d'un
code plus simple.
On peut y intgrer des variables et des objets, ce qui permet de rendre
le template "dynamique".
Le template est le squelette de la page.

Suivant les donnes que nous recevons du Model (db, api, etc), le
moteur de template va complter le template et gnrer de l'HTML.
Avec Express, on utilise beaucoup Jade.

Cours : FR_260_02_06/Cours/express_jade.js

Formation NodeJS, avanc alphorm.com

62
10/03/2016

Consolidate.js : Intgration dans Express


Consolidate.js rassemble normment de moteurs de template :
atpl
doT.js (website)
dust (unmaintained) (website)

Cours : FR_260_02_06/Cours/express_consolidate.js

Formation NodeJS, avanc alphorm.com

63
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Quelle est lutilit dun moteur de template.
Comment lutiliser et comment envoyer des variables au template.

Prochaine vido :
Side project : ChatWithMe

Formation NodeJS, avanc alphorm.com

64
10/03/2016

Node et le Web
Side project :
ChatWithMe

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

65
10/03/2016

Plan
Crer le projet avec Express

Crer un projet sur github

Lier le projet sur github

Initialiser NPM

Copier le code

Formation NodeJS, avanc alphorm.com

66
10/03/2016

Hello word

Lets code

Formation NodeJS, avanc alphorm.com

67
10/03/2016

Ce quon a couvert
Nous avons une bonne base pour commencer le dveloppement de
notre application !

Prochain chapitre :
Lasynchrone en dtail

Formation NodeJS, avanc alphorm.com

68
10/03/2016

Lasynchrone en dtail
Callback
Hell & Pyramid of Doom

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

69
10/03/2016

Plan
Pyramid of doom

Callback hell

Comment viter les piges ?

Formation NodeJS, avanc alphorm.com

70
10/03/2016

Pyramid of doom
La pyramide de la malediction

Cest le fait denchainer les blocks en cascade

Formation NodeJS, avanc alphorm.com

71
10/03/2016

Callback hell
En JavaScript, quand une tche est faite, la callback dfinie est appele

On peut rapidement arriver un code comme ci-dessous:

Formation NodeJS, avanc alphorm.com

72
10/03/2016

Comment viter les piges ?


Nommer les fonctions anonymes
Le code est plus simple lire
Quand une exception arrive, les fonctions dans la stacktrace seront nommes

Garder le code peu profond

Modulariser !
Node permet de crer des modules trs 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."

Formation NodeJS, avanc alphorm.com

73
10/03/2016

Exemple

Lets code

Exercices: FR_260_03_00/Exercice/code_sale.js
Corrig: FR_260_03_00/Exercice/code_sale_corrig.js
Formation NodeJS, avanc alphorm.com

74
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Quelles sont les plus gros piges de JavaScript et de NodeJS

Prochaine vido :
Async : Cours

Formation NodeJS, avanc alphorm.com

75
10/03/2016

Lasynchrone en dtail
Async : Cours

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

76
10/03/2016

Plan
Quest-ce que Async ?

Exemples

Formation NodeJS, avanc alphorm.com

77
10/03/2016

Quest-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 gre 3 categories :
Les collections
Le control Flow
Utils

Formation NodeJS, avanc alphorm.com

78
10/03/2016

Exemples

Cours: FR_260_03_01/Cours/
Formation NodeJS, avanc alphorm.com

79
10/03/2016

Exemple

Lets code

Cours: FR_260_03_00/Cours/code_sale.js

Formation NodeJS, avanc alphorm.com

80
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Les principaux usages de async
Filter
Map
Parallel
Serie
waterfall

Prochaine vido :
Async : Exercices

Formation NodeJS, avanc alphorm.com

81
10/03/2016

Lasynchrone en dtail
Async : Exercices
Partie 1

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

82
10/03/2016

Plan
Async-you
Waterfall
Series objects
Each
Map

Formation NodeJS, avanc alphorm.com

83
10/03/2016

Async-you
Async-you est un programme intractif qui corrigera automatiquement
vos exercices.
Tous les exercices sont traduits en francais.

Je commenterai moi-mme le code corrig

Pour installer :
$> npm install g async-you

Pour lancer :
$> async-you

Changer la langue en Francais, si vous le dsirez

Formation NodeJS, avanc alphorm.com

84
10/03/2016

Async-you

Lets code

Exercices: FR_260_03_02/Exercices/

Formation NodeJS, avanc alphorm.com

85
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Les principaux usages de async
Waterfall
Serie
Each
Map

Prochaine vido :
Async : Exercices Partie 2

Formation NodeJS, avanc alphorm.com

86
10/03/2016

Lasynchrone en dtail
Async : Exercices
Partie 2

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

87
10/03/2016

Plan
Async-you
Times
Reduce
Whilst

Formation NodeJS, avanc alphorm.com

88
10/03/2016

Async-you

Lets code

Exercices: FR_260_03_02/Exercices/

Formation NodeJS, avanc alphorm.com

89
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Les principaux usages de async
Times
Reduce
whilst

Prochaine vido :
Les promesses avec Q: Les fondamentaux

Formation NodeJS, avanc alphorm.com

90
10/03/2016

Lasynchrone en dtail
Les promesses avec Q :
Les fondamentaux

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

91
10/03/2016

Plan
Quest-ce que sont les promesses?

Module Q

Installation de Q

Faire une promesse base sur une tche

Chainer les actions

Formation NodeJS, avanc alphorm.com

92
10/03/2016

Quest-ce que Promise ?


Promise en anglais

Les promises fournissent une alternative aux callbacks lorsquon traite


un code asynchrone.
Une promesse est une abstraction pour la programmation asynchrone.

Cest un objet qui proxifie une valeur de retour ou une exception


renvoye par une fonction qui doit faire un traitement asynchrone.
Malheureusement, la comprhension des promesses nest pas facile.

Formation NodeJS, avanc alphorm.com

93
10/03/2016

Module Q
Il existe plusieurs interprtations des promesses.

Les promesses sont intgres dans ECMAscript6

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

Cours: FR_260_03_03/Cours/introduction.js

Formation NodeJS, avanc alphorm.com

94
10/03/2016

Installation de Q
Avec nodeJS
$> npm install q

Cot client, avec un navigateur web


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

Formation NodeJS, avanc alphorm.com

95
10/03/2016

Faire une promesse base sur une tache

Lets code

Cours: FR_260_03_03/Cours/premiere_promesse.js

Formation NodeJS, avanc alphorm.com

96
10/03/2016

Chainer les actions

Lets code

Cours: FR_260_03_03/Cours/chainer_les_actions.js

Formation NodeJS, avanc alphorm.com

97
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Les principaux usages des promesses avec Q
Comment crer une promesse
Comment chainer plusieurs actions

Prochaine vido :
Les promesses avec Q : les conditions et les boucles

Formation NodeJS, avanc alphorm.com

98
10/03/2016

Lasynchrone en dtail
Les promesses avec Q :
Les conditions et les
boucles
douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

99
10/03/2016

Plan
Utilisation de condition dans une promesse

Utilisation de boucle avec une promesse

Formation NodeJS, avanc alphorm.com

100
10/03/2016

Utilisation de condition dans une promesse

Lets code

Cours: FR_260_03_05/Cours/condition.js

Formation NodeJS, avanc alphorm.com

101
10/03/2016

Utilisation dune boucle avec une promesse

Lets code

Cours: FR_260_03_05/Cours/boucle.js

Formation NodeJS, avanc alphorm.com

102
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment grer les conditions et les boucles

Prochaine vido :
Les promesses avec Q : la gestions des erreurs

Formation NodeJS, avanc alphorm.com

103
10/03/2016

Lasynchrone en dtail
Les promesses avec Q :
La gestion des erreurs
et les accs directs

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

104
10/03/2016

Plan
La gestion des erreurs avec Q

Gestion des objets avec les mthodes

Formation NodeJS, avanc alphorm.com

105
10/03/2016

La gestion des erreurs avec Q


Q inclut une gestion standard des erreurs

La fonction then peut prendre deux arguments, le second argument est


une fonction anonyme qui sera appele 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 rcuprera les erreurs
non traites.
Cours: FR_260_03_06/Cours/erreurs.js

Formation NodeJS, avanc alphorm.com

106
10/03/2016

Gestion des objets avec les mthodes


Il est possible d'utiliser des mthodes de Q qui vont vous permettre de
manipuler les donnes 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

Formation NodeJS, avanc alphorm.com

107
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment grer les erreurs
Comment accder en direct certaines fonctions de Q

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

Formation NodeJS, avanc alphorm.com

108
10/03/2016

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

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

109
10/03/2016

Plan
Composer un flow

Les timers

Les modules I/O

Formation NodeJS, avanc alphorm.com

110
10/03/2016

Composer un flow
Les promesses de base supportent seulement un seul flow la fois. Q permet de
grer plusieurs flow.
Imaginons, nous avons deux flow :
Un qui fait une requte
Un qui log la tche

Grce Q, il est possible de regrouper plusieurs promesses distinctes sous une


"grosse" promesse.
Si un des deux flow a une erreur, l'autre tche est quand mme excute

Si une des sous-promesses est en erreur, toutes les promesses sont arrtes et
mises en "fail".
Cours: FR_260_03_07/Cours/composer_un_flow.js

Formation NodeJS, avanc alphorm.com

111
10/03/2016

Les timers
Les promesses ont deux systmes de contrle de temps :
.delay(ms)
.timeout(ms)
Cours: FR_260_03_07/Cours/timers.js

Formation NodeJS, avanc alphorm.com

112
10/03/2016

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

Formation NodeJS, avanc alphorm.com

113
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment composer un flow complex
Comment utiliser les timers
Comment utiliser les modules I/O

Prochaine vido :
Les promesses : Exercices Partie 1

Formation NodeJS, avanc alphorm.com

114
10/03/2016

Lasynchrone en dtail
Les promesses :
Exercices Partie 1

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

115
10/03/2016

Plan
promise-it-wont-hurt
Accomplir une promesse
Rejeter une promesse
Rejet ou ne pas rejeter
Toujours asynchrones
Valeurs et promesses
Lever une erreur

Formation NodeJS, avanc alphorm.com

116
10/03/2016

promise-it-wont-hurt
Promise-it-wont-hurt est un programme intractif qui corrigera
automatiquement vos exercices.
Tous les exercices sont traduits en franais.

Je commenterai moi-mme le code corrig

Pour installer :
$> npm install g promise-it-wont-hurt

Pour lancer :
$> promise-it-wont-hurt

Changer la langue en Franais, si vous le dsirez

Formation NodeJS, avanc alphorm.com

117
10/03/2016

promise-it-wont-hurt

Lets code

Exercices: FR_260_03_08/Exercices/

Formation NodeJS, avanc alphorm.com

118
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons revu les principaux usages des promises.

Prochain chapitre :
Les promesses : Exercices Partie 2

Formation NodeJS, avanc alphorm.com

119
10/03/2016

Lasynchrone en dtail
Les promesses :
Exercices Partie 2

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

120
10/03/2016

Plan
promise-it-wont-hurt
Utiliser qfcall

Une rgle importante


Promesses multiples
Rcurrer un JSON
Faire plus de boulot

Formation NodeJS, avanc alphorm.com

121
10/03/2016

promise-it-wont-hurt

Lets code

Exercices: FR_260_03_09/Exercices/

Formation NodeJS, avanc alphorm.com

122
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons revu les principaux usages des promises.

Prochain chapitre :
Communication temps rel

Formation NodeJS, avanc alphorm.com

123
10/03/2016

Communication temps rel

Socket.io

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

124
10/03/2016

Plan
Un peu d'histoire

WebSocket

Formation NodeJS, avanc alphorm.com

125
10/03/2016

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

Tous les 5 minutes, nous mettons jour nos donnes.

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


par pigeons"
http://www.rfc-editor.org/rfc/rfc1149.txt

Formation NodeJS, avanc alphorm.com

126
10/03/2016

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

En crant autant de requtes, de nouveaux problmes apparaissent :


Si la requte HTTP met plus de 100 millisecondes, deux requtes sont lances
paralllement.
Quand le serveur n'a pas de nouvelle donne, ces requtes sont toutes
simplement de la consommation de ressource inutile.

Formation NodeJS, avanc alphorm.com

127
10/03/2016

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

Cette technique garde la connexion ouverte jusqu avoir une rponse


serveur.
Cela a permis de rduire considrablement la latence et la bande
passante.
C'est la mthode qui se rapproche le plus des WebSockets.

Formation NodeJS, avanc alphorm.com

128
10/03/2016

WebScocket
Les WebSocket permettent de fournir un mcanisme pour les
navigateurs qui ont besoin de communiquer
Avec un navigateur
Des deux sens (upload, download)
et reste ouvert aprs avoir reu les donnes

Il est ajout partir du protocole HTTP/1.1

Malgr a, il reste deux problmes majeurs :


Le serveur de destination et tous les serveurs en relais (Cache, Reverse proxy,
load balancer, ...) doivent savoir comment grer ce protocole.
Beaucoup d'ancien navigateur ne supporte pas ce protocole.

Formation NodeJS, avanc alphorm.com

129
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
A partir de quelle problmatique les websocket et socket.io ont t crs
Une rapide overview du protocole websocket.

Prochaine vido :
Intgration dans Express

Formation NodeJS, avanc alphorm.com

130
10/03/2016

Communication temps rel


Intgration Express

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

131
10/03/2016

Plan
Ajouter le code ct serveur

Ajouter le code ct client

Side project : ChatWithMe

Formation NodeJS, avanc alphorm.com

132
10/03/2016

Cours

Ajouter le code ct serveur


Cours : FR_260_04_01/Cours/

Formation NodeJS, avanc alphorm.com

133
10/03/2016

Cours

Ajouter le code ct client


Cours : FR_260_04_01/Cours/

Formation NodeJS, avanc alphorm.com

134
10/03/2016

Side project: ChatWithMe


Intgrer socket.io dans ChatWithMe

Side project : ChatWithMe/

Formation NodeJS, avanc alphorm.com

135
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu comment prparer un projet pour
socket.io

Prochaine vido :
Projet : ChatWithMe, le code backend

Formation NodeJS, avanc alphorm.com

136
10/03/2016

Communication temps rel


Side Project :
ChatWithMe, le code
Backend
douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

137
10/03/2016

Plan
Arborescence des objets et des Managers

Liste des requtes vers le backend

Lets code !

Formation NodeJS, avanc alphorm.com

138
10/03/2016

Arborescence des objets et des Managers

userManager User

RoomManager room

Message

Formation NodeJS, avanc alphorm.com

139
10/03/2016

Liste des requtes backend


Liste des requtes 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

Formation NodeJS, avanc alphorm.com

140
10/03/2016

Liste des requtes backend


Quand lutilisateur se connecte au serveur :
1. Le serveur transmet la liste des rooms lutilisateur.

Quand lutilisateur rejoint une room


1. La room avertit tous ses utilisateurs quun nouvel utilisateur est arriv.
2. La room transmet tous ses informations au nouvel utilisateur.

Quand un utilisateur crit un message dans une room :


1. Linformation est reue dans lobjet user.
2. Transmets linformation lobjet room.
3. Lobjet room, transmet linformation tous les utilisateurs.

Formation NodeJS, avanc alphorm.com

141
10/03/2016

ChatWithMe, le code Backend

Lets code
Side project: ChatWithMe/

Formation NodeJS, avanc alphorm.com

142
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons dvelopp le code backend pour les
requtes suivantes :
JoinRoom
QuitRoom
SetName
NewMessage

Prochaine vido :
Side Project : ChatWithMe, le code frontend

Formation NodeJS, avanc alphorm.com

143
10/03/2016

Communication temps rel


Side Project :
ChatWithMe, le code
Frontend
douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

144
10/03/2016

Plan
Arborescence des fichiers

Liste des requtes vers le frontend

Lets code !

Formation NodeJS, avanc alphorm.com

145
10/03/2016

Arborescence des objets et des Managers

Realtime.js Room

Formation NodeJS, avanc alphorm.com

146
10/03/2016

Liste des requtes backend


Liste des requtes frontend :
roomList : Une fois connect, le serveur envoie la liste des rooms disponibles.
joinRoom : Une fois que nous avons rejoint une room, on reoit toutes les
infos ncessaires crer une nouvelle room.
roomNewUser : Un nouveau user rentre dans une room.
roomUsers : Si quelquun rentre ou sort de la room, on est averti par cette
requte.
roomMessages : Pas implment.
roomNewMessage : Si un user crit un message, on est averti par cette
requte.

Formation NodeJS, avanc alphorm.com

147
10/03/2016

ChatWithMe, le code Front

Lets code
Side project: ChatWithMe/

Formation NodeJS, avanc alphorm.com

148
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons dvelopp le code frontend pour les
requtes suivantes :
joinRoom
roomList
roomUsers
roomMessages
roomNewMessage
roomNewUser

Prochain chapitre :
Liaison avec la persistance des donnes
Formation NodeJS, avanc alphorm.com

149
10/03/2016

Liaison avec la persistance


des donnes
Intgration avec une
base de donnes
relationnelle (Mysql)
douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

150
10/03/2016

Plan
Introduction Mysql

Mysql avec Cloud9

Lets code

Formation NodeJS, avanc alphorm.com

151
10/03/2016

Introduction Mysql
MySQL est un systme de gestion de bases de donnes relationnelles
(SGBDR).
Formation complte sur Alphorm :
http://www.alphorm.com/tutoriel/formation-en-ligne-mysql-1z0-883

Savoir comment utiliser Node.JS et Mysql est plus que ncessaire.

Mysql est une base de donnes la plus utilise dans le monde et trs
performante.
Tous les langages ont dvelopp un driver pour interagir avec Mysql.

Formation NodeJS, avanc alphorm.com

152
10/03/2016

Mysql avec Cloud9


$> mysql-ctl start
$> mysql-ctl stop
$> mysql-ctl cli

Informations :
Hostname process.env.IP
Port - 3306 (Port par dfaut de Mysql)
User process.env.C9_USER
Password - `` (Pas de mot de passe)
Database - c9 (Le nom de la base de donnes)

Formation NodeJS, avanc alphorm.com

153
10/03/2016

Exemple

Lets code
Cours : FR_260_05_00/Cours/

Formation NodeJS, avanc alphorm.com

154
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment utiliser mysql avec NodeJs

Prochaine vido :
Sequelize, lintroduction

Formation NodeJS, avanc alphorm.com

155
10/03/2016

Liaison avec la persistance


des donnes
Sequelize, lintroduction

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

156
10/03/2016

Plan
Quest ce quun ORM ?

Sequelize

Lets code

Formation NodeJS, avanc alphorm.com

157
10/03/2016

Quest-ce quun ORM


Un mapping objet-relationnel (en anglais object-relational
mapping ou ORM)
Cest une technique de programmation informatique qui cre l'illusion
d'une base de donnes oriente objet partir d'une base de donnes
relationnelle.
LORM dfinit des correspondances entre cette base de donnes et les
objets du langage utilis.
On pourrait le dsigner par :
correspondance entre monde objet et monde relationnel

Formation NodeJS, avanc alphorm.com

158
10/03/2016

Sequelize
Sequelize est un ORM bas sur les promesses pour NodeJS

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

Il supporte les bases de donnes suivantes :


PostgreSQL
MySQL
MariaDB
SQLite
MSSQL

Et des fonctionnalits de transaction, relations, read replication,

Formation NodeJS, avanc alphorm.com

159
10/03/2016

Sequelize
La premire chose faire est de dfinir les modles

Sequelize, nous permet de dfinir les champs que nous utiliserons.


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

Formation NodeJS, avanc alphorm.com

160
10/03/2016

Sequelize
De plus, Sequelize fonctionne avec les promises.

Cela ne fonctionne pas !

Ce quil faut faire :

Formation NodeJS, avanc alphorm.com

161
10/03/2016

Lets code
Maintenant, nous allons voir les grandes utilisations de Sequelize:
La configuration
La cration de tables
Linsertion de donnes
Comment retrouver ses donnes

Cours : FR_260_05_01/Cours/

Formation NodeJS, avanc alphorm.com

162
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment utiliser sequelize
Comment viter les piges
Et partir sur de bonne base

Prochaine vido :
Sequelize, les associations

Formation NodeJS, avanc alphorm.com

163
10/03/2016

Liaison avec la persistance


des donnes
Sequelize, les associations

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

164
10/03/2016

Plan
Les diffrents types de liaison

Lets code

Formation NodeJS, avanc alphorm.com

165
10/03/2016

Les diffrents 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/

Formation NodeJS, avanc alphorm.com

166
10/03/2016

Les diffrents types de liaison


Les associations vont nous permettre de lier les donnes

Par exemples, deux tables :


Users (id, firstname, lastname)
Users-Posts (id, userId, subject, content)

Formation NodeJS, avanc alphorm.com

167
10/03/2016

Exemple

Lets code
Cours : FR_260_05_02/Cours/association.js

Formation NodeJS, avanc alphorm.com

168
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment faire des associations de table

Prochaine vido :
Interaction avec une base de donnes NoSQL : Redis

Formation NodeJS, avanc alphorm.com

169
10/03/2016

Liaison avec la persistance


des donnes
Interaction avec une
base de donnes
NoSQL : Redis
douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

170
10/03/2016

Plan
Introduction Redis

Redis avec Cloud9

Lets code

Formation NodeJS, avanc alphorm.com

171
10/03/2016

Introduction Redis
Redis (de l'anglais REmote DIctionary Server qui peut tre traduit par
serveur de dictionnaire distant et jeu de mots avec Redistribute).
Cest un systme de gestion de bases de donnes clef-valeur scalable,
trs hautes performances, crit avec le langage de programmation C.
Il fait partie du mouvement NoSQL et vise fournir les performances les
plus leves possibles.
http://redis.io/commands

Formation NodeJS, avanc alphorm.com

172
10/03/2016

Redis avec Cloud9


Pour lancer le serveur
$> sudo service redis-server start

Pour se connecter au serveur


$> redis-cli

Formation NodeJS, avanc alphorm.com

173
10/03/2016

Exemple

Lets code
Cours : FR_260_05_03/Cours/

Formation NodeJS, avanc alphorm.com

174
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment utiliser redis avec NodeJs

Prochaine vido :
Interaction avec une base de donnes NoSQL : MongoDB, lintroduction

Formation NodeJS, avanc alphorm.com

175
10/03/2016

Liaison avec la persistance


des donnes
Intgration avec une base
de donnes NoSQL :
MongoDB, lintroduction

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

176
10/03/2016

Plan
Introduction MongoDB

MongoDB avec Cloud9

CRUD

Formation NodeJS, avanc alphorm.com

177
10/03/2016

Introduction MongoDB
MongoDB de l'anglais humongous qui peut tre traduit par norme

Cest un systme de gestion de bases de donnes :


Oriente documents.
Rpartissable sur un nombre quelconque d'ordinateurs.
Ne ncessitant pas de schmas prdfinis des donnes.

Il est crit en C++.

Il fait partie du mouvement NoSQL.

Formation NodeJS, avanc alphorm.com

178
10/03/2016

MongoDB avec Cloud9


Pour lancer le serveur
$> mongod --nojournal

Pour se connecter au serveur


$> mongo

Formation NodeJS, avanc alphorm.com

179
10/03/2016

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

Formation NodeJS, avanc alphorm.com

180
10/03/2016

Pour aller plus loi


Une formation complte sur Mongodb sur Alphorm :
http://www.alphorm.com/tutoriel/formation-en-ligne-mongodb-
administration

Formation NodeJS, avanc alphorm.com

181
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment utiliser MongoDB avec mongoose.

Prochaine vido :
Interaction avec une base de donnes NoSQL : MongoDB, les associations

Formation NodeJS, avanc alphorm.com

182
10/03/2016

Liaison avec la persistance


des donnes
Intgration avec une base
de donnes NoSQL :
MongoDB, les associations

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

183
10/03/2016

Plan
Les associations

Lets code

Formation NodeJS, avanc alphorm.com

184
10/03/2016

Les associations
De la mme faon quavec MySQL, nous allons lier les users et les posts.

Formation NodeJS, avanc alphorm.com

185
10/03/2016

Exemple

Lets code
Cours : FR_260_05_05/Cours/associate.js

Formation NodeJS, avanc alphorm.com

186
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment faire des associations de documents avec MongoDb

Prochaine vido
Intgration de MySQL ChatWithMe

Formation NodeJS, avanc alphorm.com

187
10/03/2016

Liaison avec la persistance


des donnes

Intgration de MySQL
ChatWithMe

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

188
10/03/2016

Plan
Lets code

Formation NodeJS, avanc alphorm.com

189
10/03/2016

Exemple

Lets code
Side project: ChatWithMe

Formation NodeJS, avanc alphorm.com

190
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons intgr Mysql ChatWithMe

Prochaine vido
Intgration de Sequelize ChatWithMe

Formation NodeJS, avanc alphorm.com

191
10/03/2016

Liaison avec la persistance


des donnes
Intgration de Sequelize
ChatWithMe

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

192
10/03/2016

Plan
Lets code

Formation NodeJS, avanc alphorm.com

193
10/03/2016

Exemple

Lets code
Side project: ChatWithMe

Formation NodeJS, avanc alphorm.com

194
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons intgr Sequelize ChatWithMe

Prochaine vido
Intgration de MongoDB ChatWithMe

Formation NodeJS, avanc alphorm.com

195
10/03/2016

Liaison avec la persistance


des donnes
Intgration de MongoDB
ChatWithMe

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

196
10/03/2016

Plan
Lets code

Formation NodeJS, avanc alphorm.com

197
10/03/2016

Exemple

Lets code
Side project: ChatWithMe

Formation NodeJS, avanc alphorm.com

198
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons intgr Mysql ChatWithMe

Prochaine chapitre
Intgration de Sequelize ChatWithMe

Formation NodeJS, avanc alphorm.com

199
10/03/2016

Bonus
PM2, le monitoring

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

200
10/03/2016

Plan
Quest ce que PM2 ?

La gestion dun processus

Les actions sur le processus

Les logs

Lancer un processus avec des arguments

Les limites

Formation NodeJS, avanc alphorm.com

201
10/03/2016

Quest ce que PM2 ?


PM2 est un gestionnaire de processus de production pour les
applications Node.js avec un load balancer intgr.
Il permet de garder les applications vivantes et les redmarrera si un
problme intervient.
Il permet aussi de recharger le code de lapplication sans couper les files
de description (Reload chaud)
https://github.com/Unitech/pm2

Installation :
$> npm install g pm2

Formation NodeJS, avanc alphorm.com

202
10/03/2016

La gestion dun processus


Dmarrer le processus :
$> pm2 start bin/www
$> pm2 start bin/www --name ChatWithMe

PM2 permet de dmarer le processus en cluster mode, cela permettra


de profiter de l'ensemble des processus de la machine.
$> pm2 start bin/www -i 0 # dmarre avec autant de processus que de
processeur.

Pour lister les processus


$> pm2 list

Formation NodeJS, avanc alphorm.com

203
10/03/2016

La gestion dun processus


Afficher plus d'informations sur un processus en particulier
$> pm2 describe 0

Monitorer les process lancs


$> pm2 monit

Retire un processus de la liste


$> pm2 delete 0
$> pm2 delete all

Formation NodeJS, avanc alphorm.com

204
10/03/2016

Les actions sur le processus


Diffrente actions :
$> pm2 stop all # Stop tous les processus
$> pm2 restart all # Restart tous les processus

$> pm2 reload all # Redmarrer un processus sans aucun downtime


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

$> pm2 stop 0 # Stop un processus spcifique


$> pm2 restart 0 # Restart un processus spcifique

Formation NodeJS, avanc alphorm.com

205
10/03/2016

Les logs
Grer les logs
$> pm2 logs [--raw] # Affiche tous les logs
$> pm2 flush # Vide tous les logs

Formation NodeJS, avanc alphorm.com

206
10/03/2016

Lancer une processus avec des arguments


Dmarrer un processus avec des arguments
$> pm2 start app.js -- -a 23 # Passe l'argument '-a 23' app.js

Spcifier les logs explicitement


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

Formation NodeJS, avanc alphorm.com

207
10/03/2016

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.

Formation NodeJS, avanc alphorm.com

208
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Un projet de monitoring de processus NodeJS pour une mise en production !
Lancer en cluster un processus
Grer les logs

Prochaine vido :
Keymetrics, la supervision

Formation NodeJS, avanc alphorm.com

209
10/03/2016

Bonus
Keymetrics,
la supervision

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

210
10/03/2016

Plan
Quest-ce que Keymetrics ?

Inscription

Lien avec PM2

Ajout de sondes

Formation NodeJS, avanc alphorm.com

211
10/03/2016

Quest-ce que Keymetrics ?


Keymetrics permet d'afficher des statistiques remontes par pm2
https://keymetrics.io/

Formation NodeJS, avanc alphorm.com

212
10/03/2016

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

Formation NodeJS, avanc alphorm.com

213
10/03/2016

Lien avec PM2


Pour lier Keymetrics avec un PM2
$> pm2 link xxxxxxxxxxx xxxxxxxxxx [hostname]

Formation NodeJS, avanc alphorm.com

214
10/03/2016

Ajouter des sondes


Cest le module pmx qui permet dajouter 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 : Incrmente et dcrmente un nombre
Meter : Remonte un nombre sur le temps, ex Nombre de requtes par seconde.
Histogram : Garde un rservoir de valeur sur les 5 dernires minutes

Formation NodeJS, avanc alphorm.com

215
10/03/2016

Exemple

Ajout de nouvelle sonde


Side project : ChatWithMe

Formation NodeJS, avanc alphorm.com

216
10/03/2016

Ce quon a couvert
Dans cette vido, nous avons vu :
Comment superviser un projet NodeJS
Comment remonter certaines informations mtier

Prochain chapitre :
La conclusion !

Formation NodeJS, avanc alphorm.com

217
10/03/2016

Conclusion

douard FERRARI
Site : http://www.alphorm.com Formateur et Consultant indpendant
Blog : http://blog.alphorm.com Contact : contact@ferrari.wf
Formation NodeJS, avanc alphorm.com

218
10/03/2016

Ce quon a couvert
1. Comment installer et mettre en place un Express 1. Comment sauvegarder des donnes en couvrant les
1. Systme de route bases de donne suivante :
2. Gestion des fichiers statiques 1. Mysql
3. Comment ajouter nos propres middlewares 2. MariaDB
4. Comment utiliser un moteur de template 3. SQLite
4. Postgres
2. Deux diffrentes mthodes de dveloppement 5. MSSql
asynchrone: 6. Redis
1. Async 7. MongoDB
2. Les promesses avec Q
2. Dvelopper un projet NodeJS en MVC.
3. La communication en temps raille avec les clients
(front-end) grce Socket.io 3. Comment monitorer et superviser le projet avec
PM2 et Keymetrics

Formation NodeJS, avanc alphorm.com

219
10/03/2016

Avez-vous des Questions / Remarques / Commentaires ?

Formation NodeJS, avanc alphorm.com

220
10/03/2016

A bientt

Keep in touch !
E-mail : edouard@ferrari.wf
Linkedin : https://fr.linkedin.com/in/edouardferrari
Twitter : https://twitter.com/edouard_ferrari
Alphorm : http://www.alphorm.com/formateur/edouard-ferrari

Formation NodeJS, avanc alphorm.com

221