Académique Documents
Professionnel Documents
Culture Documents
AVANCÉE
EXPRESS
Chapitre 3 : Développement du backend
Enseignant :
Mohamed Amine Ben Rhouma
2023/2024
PRÉSENTATION
● Express est le framework NodeJS le plus populaire.
● S’appuyer sur des middlewares qui peuvent s’insérer dans le flux de gestion
des requêtes
4
RAPPEL DE L’ARCHITECTURE
5
PREMIÈRE EXÉCUTION
● Créons un nouveau fichier, appelé app.js et testons Express.
● Le code ci-dessous permet de lancer le serveur node sur le port 3000.
● Pour éviter de redémarrer notre application à chaque modification, il est
préférable d’installer le module nodemon via NPM.
METHODS HTTP
❖ A partir de la variable app, on peut accéder à divers méthodes dont les requête HTTP
standards que notre API va réceptionner à partir de notre application front-end.
▸
RETOUR À NOTRE API
les middlewares sont exécutés de manière séquentielle.
▸
La propriété extended, qui est par défaut égal à false permet de lire
▸
les nested objets à partir d’un formulaire.
Un document n’est rien d’autre qu’un objet JSON. En réalité cet objet JSON sera stocké en
tant qu’objet BSON (Binaire).
{
_id: 5abe492a8cbadb22dc80ab54 "nom":
"iPhone X",
"prix": 1159
}
MongoDB: Schéma
Contrairement à une base de données relationnelle le
schéma n’est pas fixé à l’avance.
Une même collection peut contenir différents documents (objets) de structure
différentes.
{
_id: 5abe492a8cbadb22dc80ab54 "nom":
"iPhone X",
"prix": 1159
}
{
_id: 4afe3fe83611502135847759
"nom": "iPhone X", "description": "Dernier
iPhone"
}
MongoDB vs DB relationnelle
Une des plus grandes différences est que dans MongoDB il n’y a pas de clés
étrangères ou de jointures.
$ mongod
Afin d'interagir avec le serveur, il est possible d’utiliser le client mongo depuis le
terminal:
$ mongo
Commandes shell MongoDB
> show dbs
● Cette méthode prend en argument l’adresse de la BD, ainsi qu’un objet d’arguments
useNewUrlParser et useUnified Topology.
gère les routes pour les différentes requêtes HTTP (GET, POST, ...) →
▸
méthodes get(), post(), etc.
ROUTES
A partir de notre application Angular, nous avons besoin de cinq routes afin
▸
d’écrire et de récupérer les informations nécessaires.
Pour cela, nous utiliserons Router() à partir d’Express.
CONTROLLERS
A présent, il faudra implémenter tous les méthodes associées aux routes.
▸
Chaque méthode est une méthode asynchrone qui prend 3 arguments : req (la
▸
requête réceptionnée), res (le résultat qui va être retourné) et next (qui passera le
relais au prochain middleware)
CONTROLLERS
L’une des bonnes pratiques avec Express et NodeJS, c’est de séparer la gestion des
▸
routes de leur logique de traitement.
Il est donc conseillé de définir un contrôleur pour chaque route dans un dossier
▸
controllers.
Pour cela, nous utiliserons le module bcryptjs, après l’avoir installé via NPM : npm install -g
▸
bcryptjs
Depuis bcryptjs, la méthode hash se charge de coder le mot de passe et retourne une
▸
promesse avec le résultat.
JWT
Un API rest stateless. On peut donc pas utiliser les sessions et donc
▸
sauvegarder les états des applications clientes.
Comme alternative, les API utilisent alors les JSON Web Token (JWT) pour vérifier si
▸
un utilisateur est authentifié ou pas.
Ces JWT sont générés via le module jsonwebtoken que nous devons évidemment
▸
installer via NPM.
ACL
Nous souhaitons interdire les opérations d'écriture (POST, PUT, DELETE) aux utilisateurs
▸
non authentifiés.
Ainsi, nousajoutons un middleware qui vérifie chaque token envoyé avec
▸
ces requêtes.
EJS
EJS : EJS ou Embedded Javascript Templating est un moteur de création de modèles
▸
utilisé par Node.js.
Le moteur de modèles permet de créer un modèle HTML avec un minimum de code.
En outre, il peut injecter des données dans un modèle HTML côté client et produire
le HTML final. EJS est un langage de création de modèles simple utilisé pour générer
un balisage HTML avec du JavaScript simple. Il est également utile d'intégrer du
JavaScript dans une page HTML.
EJS
▸Le comportement par défaut d'EJS est qu'il recherche dans le dossier « vues » les modèles à restituer. Créons donc
un dossier « vues » dans notre dossier de projet de nœud principal et créons un fichier nommé « home.ejs » qui
doit être servi sur certaines requêtes souhaitées dans notre projet de nœud