//-----------------------------------------------------
Ce fichier contient les 10 premiers TP JavaScript-Node-Express :
Usage du fichier, pour voir la structure :
sur PC :
ctrl-k-0 : pour le plan
ctrl-k-k : pour tout ouvrir
sur mac
cmd-a + cmd-k-0 : pour le plan
cmd-a + cmd-k-j : pour tout ouvrir
//-----------------------------------------------------
TP-0) Installations de base : Chrome, VS Code, Sublime Text
Installer Chrome
Installer VS Code : éditeur amélioré = IDE
Installer Sublime Text : édtieur basique très bien
//-----------------------------------------------------
TP-1) Le JavaScript : le langage associé au HTML
=> donc "côté client"
Ouvrir 24-25-Sem2-GC-5-Node-Express-J1 dans VS Code
Regardez l''exemple w3s.html dans VS Code
Dans ce cas, c''est du JavaScript côté client
Ouvrez la page HTML dans Chrome
L'objectif est d'afficher la liste des films ci-dessous donné au format JSON :
const movies = [ // [ ] : c'est un tableau
{ // { } : c'est un objet
title:'Don\'t look up',
year:2021
},
{
title:'Une vérité qui dérange',
year:2006
},
// on compacte un peu la suite
{title:'Melencholia', year:2011},
{title:'Beasts of the southern wild', year:2012},
{title:'Sauve qui peut (la vie)', year:1980},
{title:'Nope', year:2022},
{title:'L\'amour à mort', year:1984},
]
On ouvre avec Visual Studio Code
On regarde le code de façon détaillée
//-----------------------------------------------------
TP-2) Installer Node.js
Node.js : interpréteur JavaScript : comme du python
l'interpréteur JS : il y en a un dans les navigateurs
L'interpréteur JS hors navigateur c'est Node.js
Node.js c'est le JavaScript côté serveur
Installer Node.js (ça installe aussi npm)
Node = noeud
npm : node package manager
(package = bibliothèque ou librairie = ensemble de fonctions et d'objets qu'on pourra utiliser)
Aller sur le site Node.js, et installer !
vérifier que c'est fait :
dans un terminal :
node -v
npm -v
Node.js : c'est la première couche :
ensuite on ajoute des couches en plus :
des packages en plus qu'on ajoute avec npm
Autres couches classiques (populaires) :
express
react
angular
react-native
//-----------------------------------------------------
TP-3) Node.js comme interpréteur de JavaScript
Dans un terminal = shell = invite de commande
Démarrez Node.js : l'interpréteur comprend le langage JavaScript
On peut créer le tableau movies dans Node : faites-le !
Affichez-le
Affichez le troisième film (movies[2])
Affichez tous les titres avec 3 types de boucle :
utilisez une boucle for(let i=0; ...)
utilisez une boule forEach avec une fonction classique
utilisez une boucle forEach avec une fonction fléchée
//-----------------------------------------------------
TP-4) Premières application Node.js côté serveur :
Dans l'introduction, on a vu un exemple :
// Importation du module http de Node.js
const http = require('http');
// Création du serveur
const server = http.createServer((req, res) => {
// Définit l'en-tête HTTP (code de statut et type de contenu)
res.writeHead(200, { 'Content-Type': 'text/plain' });
// Envoi de la réponse "Hello World" au navigateur
res.end('Hello World Node.js');
});
// Le serveur écoute sur le port 3000
server.listen(3000, () => {
console.log('Serveur en cours d\'exécution sur http://localhost:3000');
});
Exécutez ce code
regardez ce qui s'affiche dans le terminal : serveur en cours d'exécution...
affichez le Hello World dans Chrome
Faites une 2ème version avec :
res.end('
Hello World Node.js
');
en remplaçant 'text/plain' par 'text/html'
//-----------------------------------------------------
TP-5) Installation d''une application Express :
Créez un dossier expressmovies/J1 (ou J2, J3, etc. selon la journée de cours)
Vous pouvez le mettre là ou était 24-25-Sem2-GC-5-Node-Express-J1
Par exemple : C:/Users/vous/Documents/GC-5/express/expressmovies/j1
On ouvre un Visual avec le dossier "expressmovies/j1"
On ouvre un terminal dans visual :
on est dans le dossier expressmovies/j1
Passez la commande : npm init
npm init
des q? et des réponses par défaut
desc : app for movie fans
point d''entrée : app.js
keyword : des mots clés pour référencer le site
auteur : qui on veut
licence: par défaut, ISC : logiciel libre, GNU
nmp init -y (équivalent à npm init --yes)
Ca ne pose pas de question et ça met des valeurs par défaut
cette commande crée :
un fichier package.json
on pourra changer le contenu du fichier package.json
un dossier node_modules
Il contient les packages nécessaires à Node.js
Il est gros (2,2 MO de base, plus de 60 dossiers, plus de 600 éléments)
On peut le supprimer et le recharger :
nmp install
On verra une autre solution avec yarn
Installez le package express :
Le package express va nous permettre de créer un serveur web avec Node.js
encore plus facilement qu''avec Node.js tout seul.
Passez la commande : npm install express --save
le --save permet d''ajouter une entrée dans le package.json pour express dans les dependencies
Ca permettra de faire des npm update si on se sépare du dossier node_modules
//-----------------------------------------------------
TP-6) Première application Express
Création d''une application web : app.js
Créez un fichier app.js : c''est le main
Contenu du fichier app.js :
Mettez le code ci-dessous dans app.js :
Lisez-le !
const express = require('express');
const app = express();
// Ces 2 premières lignes créent un objet app
// qui permet d'accéder à plein de méthodes.
app.get('/', function(req, res){
console.log("url: ", req.url)
res.send('hello world')
});
// '/'c'est la route
// la function est un "callback" :
// une fonction appelée par la methode get
// cette fonction est définie directement dans l'appel
// d'où le }) à la fin
// req : c'est la requete issue du navigateur - req.url, c'est l'url
// res : c'est le résultat
// on écoute sur le port 3000 : localhost:3000 dans un navigateur
app.listen(3000, function() {
console.log("listening on port 3000")
});
Exécutez le code : node app.js dans le terminal visual
Dans le terminal, ça affiche : listening on port 3000
Dans le navigateur, allez sur: localhost:3000
Ca affiche "hello world"
Dans l''inspecteur du navigateur, choisissez : network
inspecteur - network - all - localhostet
Vous voyez l''url, la méthode get, le code status
Visualiser l''élément HTML
Visualisez le code source HTML : uniquement "hello world"
Variantes :
On peut mettre "hello world
"
On peut aussi mettre :
res.send(`
test
hello world
`)
Avec des "backstick"
C''est un peu nul : on perd la coloration syntaxique !
On fera mieux tout à l''heure avec un TEMPLATE !
//-----------------------------------------------------
TP-7) Quelques évolution de syntaxe Node.js
Modifiez le code que vous avez écrit pour obtenir celui-ci :
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
console.log(`url: ${req.url}`)
res.send('hello world !!!')
});
app.listen(PORT, () => {
console.log(`listening on port ${PORT}`)
});
Les nouveautés :
La constante PORT
Les backsticks et les ${}
a = 10;
console.log(`coucou ${a}`);
Les fonctions fléchées
() => {
//-----------------------------------------------------
TP-8) nodemon
L'objectif est d'avoir à éviter de relancer le serveur
pour tester un code qu'on vient de modifier.
nodemon fait ça : c'est l'équivalent de node,
mais il se relance tout seul en cas de modification du code
Installez nodemon :
npm install -g nodemon
l'option -g permet d'installer nodemon de façon globale, une fois pour toute
Démarrez votre application avec nodemon :
nodemon app.js (à la place de node app.js) : c'est tout !!!
Vérifiez que ça fonctionne
en modifiant quelque chose dans votre application
En plus, dans VS Code, on sélectionne : fichier/enregistrement automatique
Comme ça, tout est automatique !!!
Erreur possible :
l’exécution de scripts est désactivée sur ce système =>
Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
//-----------------------------------------------------
TP-9) Démarrages génériques
1) "start" : pour démarrer avec npm start
Le but est de mettre le nom du "main" : app.js dans package.json
Dans package.json :
"scripts": {
"start": "node app.js",
// on ajoute la propriété start en précisant : node app.js
Pour exécuter, on peut faire un générique : : npm start
npm start c''est une simplification autorisé de npm run start
On n''a plus besoin de faire : node app.js
2) "scripts": pour démarrer avec npm run dev
Le but est d'écrire la commande qu'on veut : par exemple nodemon app.js
Dans package.json :
"scripts": {
"dev": "nodemon app.js",
// on ajoute la propriété dev en précisant : nodemon app.js
Pour exécuter, on peut faire un générique : npm run dev
On n''a plus besoin de faire : nodemon app.js
3) On peut mettre ce qu''on veut dans script
"test" : pour démarrer avec npm run test
"scripts": {
"test": "node app.js Toto",
Si dans app.get, on a : res.send(`hello ${process.argv[2]}`)
Alors npm run test fournira "Toto" pour process.argv[2]
Testez les 3 possibilités.
//-----------------------------------------------------
TP-10) yarn
Rechargement : npm update
On peut supprimer node_modules et package-lock.json pour réduire la taille de notre projet
Pour recharger tout il suffit de faire : npm update
yarn : plus pratique que npm
Pour installer yarn, on passe par le site chore-update qui propose un msi
On peut supprimer node_modules et yarn.lock
Pour recharger tout, il suffit de faire :
yarn
Installez yarn et testez le.
3-02
//-----------------------------------------------------
TP-11) Routage : 3 premiers exemples
1) Ajouter la route : localhost:3000/movie
Testez localhost:3000/movie dans le navigateur :
On a un message d''erreur
Dans l''inspecteur, on a une erreur 404 : ça veut dire pas de route
Ajoutez après la route / (ou avant)
app.get('/movies', (req, res) => {
console.log(`url: ${req.url}`)
console.log('Bientôt des films : affichage en terminal)
res.send('Bientôt des films')
});
Notez la présence des back-sticks
Testes : localhost:3000/movie
On a l'affichage dans le navigateur
Dans l'inspecteur, on voit bien l'url
Dans le terminal, on a aussi le message
2) Une route par film : /movies/1, /movies/2, etc.
Ce qui serai bien, ce serait d'avoir une route par film :
/movies/1, /movies/2, etc.
Comment faire ?
app.get('/movies/:id', (req, res) => {
console.log(`url: ${req.url}`)
const id = req.params.id;
res.send(`Bientôt le film numéro ${id}`)
});
Testez ce code
Comprennez bien le :id, le req.params, les back-sticks et le ${id}
Affichez tout req.params dans le terminal du serveur
3) Route /movies/add
On veut une route pour ajouter un film : /movies/add
Faites le vous même avec la même logique d'affichage que dans le TP 12
Dans un premier temps, mettez la nouvelle route après celle du TP-12
Que constatez-vous ?
Pourquoi ?
Dans un 2ème temps, mettez la nouvelle route avant la route :id
Que constatez-vous ?
Pourquoi ?