NodeJS Course Support
NodeJS Course Support
NodeJS Course Support
Node JS
Programmation JavaScript côté serveur
Anis ASSAS
Computer engineer
University teacher (ISET Djerba)
Consultant and IT trainer
Follow me at :
assas_anis@yahoo.fr
Fiche formation
o Durée : 3 jours
o Prérequis :
• Bonnes connaissances du langage Javascript. Une première approche d'un framework JavaScript
(côté client) serait un plus.
o Objectifs / Compétences visées : Apprendre à développer une application serveur avec Node.js :
• Connaître les fondements de fonctionnement de Node JS
• Installer et configurer un serveur Node.js
• Manipuler l'API de Node.js
• Gérer la persistance des données (éventuellement dans une base NoSQL)
o Méthodes pédagogiques :
• Notions théoriques et notes de cours
• Démonstrations et activités pratiques
3
Plan de formation
1. Présentation générale
2. Les premiers pas Node JS
3. Express
4. Bases de données NoSQL : MongoDB
5. Exemple d’application JS FullStack
1.
Présentation générale
Introduction
C’est quoi Node JS ?
Pourquoi Node JS ?
Mode fonctionnement
Installation
Introduction
Problème de latence :
6
Présentation générale
7
Présentation générale
• JavaScript
permet d’écrire des scripts qui seront exécutés côté client
Langage de programmation qui sera interprété par le moteur du navigateur pour
obtenir une application utilisable par les visiteurs (affichage, modifications,
animations, …)
• Node
Environnement permettant d’écrire du code JS qui s’exécute côté serveur :
fonctionne en dehors du navigateur
9
Modèle Multi Threads Bloquant
10
Node JS : Mode de fonctionnement
12
Node JS : modèle non bloquant
13
Node JS : installation
• Installation :
• https://nodejs.org/fr/download/
• node -v : version de node
Initialisation du projet
Les modules
Les fonctions callback
Les fonctions synchrones et asynchrones
Création du serveur
Node JS : initialisation d’un projet
• Propriétés :
• Il est possible d’utiliser des éléments définis dans un autre fichier
• Pour cela, il faut l’importer là où on a besoin de l’utiliser
• Pour importer un élément, il faut l’exporter dans le fichier source
• Exports, require :
• Syntaxe native de NodeJS définie dans CommonJS : système de gestion de module de
NodeJS.
17
Les modules
• Modules de la communauté NodeJS : pour les utiliser, il faut les télécharger puis les
utiliser via la console.
• Ils sont gérés par NPM (Node Package Manager), voir www.npmjs.com
• Nos propres modules : pour les utiliser, il faut les exporter puis les importer avec
require('./nomModule');
18
npm : Node Package Manager
20
Exemples
• Exemple 1 :
21
Exemples
• Exemple 2 :
22
Exemples
• Exemple 3 :
• Utiliser la fonction require dans un autre fichier test.js pour importer les modules
définis dans mesModules.js
var mod = require('./mesModules')
mod()
26
Les fonctions callback
• Remarque :
• En NodeJS, on utilise très souvent les callback surtout pour les traitements asynchrones.
• Les fonctions callbacks en NodeJS ont une signature similaire.
• Exemple 1 : function salutation(name) {
console.log('Bonjour ' + name);
}
bonjour('Anis',salutation);
27
Les fonctions callback
• Exemple 2 :
28
Les fonctions callback
• Exercice :
• Corrigé de l’exercice :
• Fichier data.js :
var tab = [1, 3, 6, 8, 9];
var element = 6;
• Fichier searchElement.js :
exports.searchElement = function (data, callback) {
for (var i = 0; i < data.tableau.length; i++)
if (data.tableau[i] == data.filtre)
return callback(null, i);
return callback('Element ' + data.filtre + ' non retrouvé dans le tableau');
};
30
Les fonctions callback
• Corrigé de l’exercice :
• Fichier main.js :
var {searchElement} = require('./searchElement')
var {data} = require('./data')
31
Les fonctions synchrones et asynchrones
32
Les fonctions synchrones et asynchrones
• JavaScript fournit plusieurs manières pour définir et appeler des fonctions asynchrones :
• Les fonctions de callback
• Le principe des promesses : promise
• L’usage de async et await
33
Les fonctions synchrones et asynchrones
Exemple 1 :
• Fichier salutation.txt : bonjour
bonsoir
salut
aurevoir
• Fichier synch.js :
var fs= require('fs'); • Fichier asynch.js :
var content =
fs.readFileSync('./salutation.txt'); var fs = require('fs');
console.log(content.toString()); var content = fs.readFile('./salutation.txt',
console.log('end of file'); function (err, result) {
if (err)
console.error(err);
console.log(result.toString());
});
console.log('end of file');
34
Les fonctions synchrones et asynchrones
• Exemple 2 :
• Ecrire un programme NodeJS qui permet de créer un répertoire monDossier et trois fichiers
file1.txt, file2.txt et file3.txt qui seront situés dans monDossier
var fs = require("fs");
var file = ["file1.txt", "file2.txt", "file3.txt"];
if (fs.existsSync('monDossier'))
console.error('dossier existe deja');
else
fs.mkdirSync('monDossier');
for (let i = 0; i < file.length; i++) {
fs.writeFile('monDossier/' + file[i], 'contenu fichier', (err) => {
if (err)
console.error(err);
});
}
35
Node JS : Création de serveur
server.listen(4000, () =>
console.log('Adresse du serveur : http://localhost:4000'));
37
Node JS : Création de serveur
39
Node JS : Création de serveur
• Exercice :
• Ecrire un programme qui affiche le résultat d’une opération arithmétique (addition,
soustraction, multiplication, division) des nombres passés en paramètre.
• Exemples d’exécution :
41
Node JS : Création de serveur
42
3.
Express JS
Présentation générale
Mise en place du serveur
Gestion des routes
Le package nodemon
Les middlewares
Framework Express : présentation
• Installation :
• npm install --save express
app.listen(port, () => {
console.log(`Server is running on port ${port}`)
})
45
Gestion des routes
app.listen(port, () => {
console.log(`Server is running on port ${port}`)
})
46
Gestion des routes
• Exemple :
const express=require("express");
const app=express();
Route statique
app.get('/',(req,res)=>{
res.setHeader('content-type','text/html');
res.send('<h1>Hello Express</h1>');
}); Route dynamique
app.get('/infos/:code',(req,res)=>{
res.setHeader('content-type','application/json');
var infos={name:'Express',email:'foulen@benFoulen.net', code:req.params.code};
res.end(JSON.stringify(infos));
});
app.listen(4000,()=>{
console.log('Server Started ..');
Serveur Node JS
});
48
Gestion des routes avec Express
• Réponse JSON :
res.json()
res.end(JSON.stringify(infos));
res.json(infos)
49
Package nodemon
50
Exercice
• Projet node :
• Créer un nouveau projet node avec le fichier d’entrée app.js
• Installer express ainsi que nodemon
• Source de données :
• Créer un nouveau fichier users.js incluant les utilisateurs trouvés sur cette API :
https://jsonplaceholder.typicode.com/users
• Routes :
• Créer la route : /users afin d’afficher en format JSON la liste de tous les utilisateurs
• Créer la route : /users/:id affichant les informations d’un utilisateur dont on connait l’id
51
Exercice
54
Framework Express : les middlewares
• Déclaration :
• Utilisation :
Il suffit d'appeler la méthode app.use(middleware) pour utiliser un middleware.
On peut enchainer plusieurs app.use("Mid1"), .use("Mid2"), use("Mid3")
55
Framework Express : les middlewares
• Les middlewares sont interconnectés dans un pipe line et peuvent communiquer entre eux.
• Tous ces middlewares communiquent entre eux en se renvoyant jusqu'à 4 paramètres :
• err : les erreurs
• req : la requête du visiteur
• res : la réponse à renvoyer (la page HTML et les informations d'en-tête)
• next : un callback vers la prochaine fonction à appeler
56
Framework Express : les middlewares
• Exemple :
const express = require('express');
const app = express(); Adresse du serveur : http://localhost:4000
const middleWare = (request, response, next) => middleWare: /
{ requête reçue
console.log("middleWare:", request.url);
next(); Déplacer app.use(middleWare) après app.get
}; Adresse du serveur : http://localhost:4000
app.use(middleWare); requête reçue
app.get('/', (request, response, next) => { middleWare: /
console.log('requête reçue');
response.send('Hello World!');
next(); Supprimer next au niveau de app.get
});
app.listen(4000, () => console.log('Adresse du Adresse du serveur : http://localhost:4000
serveur : http://localhost:4000')); requête reçue
57
Framework Express : les middlewares
58
Framework Express : les middlewares
59
4.
Les bases de données NoSQL : MongoDB
Présentation
Installation
MongoShell (opérations CRUD)
MongoDB Compass
MongoDB Atlas : persistance dans le cloud
Introduction
• MongoDB :
• Système de gestion de base de données NoSQL orientée documents
• Créé en 2007, Open-source, développé en C++
• Disponibilité de plusieurs fonctionnalités SQL (COUNT, GROUP BY, ORDER BY, SUM...)
• Possibilité d’accéder aux données via une console JavaScript
• Des drivers disponibles pour plusieurs langages de programmation (Java, JavaScript, PHP,
Python, Ruby...)
• Données stockées sous format JSON (JavaScript Object Notation)
• SGBD NoSQL le plus populaire (utilisé par MTV, Disney, Doodle, Adobe, eBay ...)
62
MongoDB : présentation
• SQL Vs MongoDB :
• Base = Base
• Table = Collection
• Enregistrement (tuple) = Document
• En BDR, tous les tuples d’une table ont les mêmes champs (mais les valeurs
peuvent être différentes (les valeurs sont affectées à des colonnes)
• Dans une collection MongoDB, les documents peuvent ne pas avoir un champ
partagé (pas de colonnes dans un document MongoDB). 63
Installation
65
MongoShell : Connexion et création d’une base de données
66
Connexion et création d’une base de données
• Par défaut :
• Il existe trois bases de données :
• admin, config et local
• Si on ne se connecte pas à une base de données, on utilise par défaut une base
de données appelée : test
67
Suppression d’une base de données
68
Gestion des collections
• Collection :
• Une collection : est l’équivalent d’une table en SQL.
69
Gestion des collections
• show tables, ou
• db.getCollectionNames()
70
Gestion des documents : Insertion
• Document :
• Un document : est l’équivalent d’un tuple en SQL.
• Chaque document possède un _id attribué par l’utilisateur ou par MongoDB
(ObjectId). Le champ _id constitue l’index de la collection.
71
Gestion des documents : Insertion
• Exemple :
db.personne.insert({
nom: ’assas’,
prenom: ’anis’,
age: 43,
sportif: true
})
objet = {
_id: 10,
• Ou encore avec save : nom: ’assas’,
db.personne.save({ prenom: ’anis’,
nom: ’assas’, age: 45,
prenom: ’anis’, sportif: true
age: 43, }
sportif: true db.personne.save(objet);
})
72
Gestion des documents : Insertion
74
Gestion des documents : Lecture
77
Gestion des documents : Modification
78
Gestion des documents : Modification
• Exemple :
• db.personne.update(
{
_id: 12
},
{
prenom: ’Salah’,
}
)
• Exemple :
• db.personne.remove({nom: "bob"}) : Supprimer tous les documents
dont le champ nom contient comme valeur bob.
80
MongoDB Compass
• Connexion :
• Cliquer sur l’onglet "Connect" "Connect to" ou le raccourci "New Connection"
• Bases de données existantes :
82
MongoDB Compass
83
MongoDB Atlas
Lien :
https://www.mongodb.com/fr-
fr/cloud/atlas
> Start free
- Vous vous connectez par votre compte
(si vous êtes déjà inscrit) ou via votre
compte google.
84
5.
Exemple d’application FullStack
Atelier : activité pratique
• Architecture de l’application :
87
88