100% ont trouvé ce document utile (1 vote)
750 vues9 pages

Cours Complet Nodejs

Ce cours détaillé sur Node.js couvre l'environnement d'exécution JavaScript côté serveur et son utilisation avec Express.js pour créer des applications backend performantes. Il aborde également des concepts tels que les middlewares, le routage, la gestion de données avec CRUD, l'intégration de MongoDB avec Mongoose, ainsi que des pratiques de développement comme l'utilisation de Docker et la mise en place de microservices. Enfin, il propose des bonnes pratiques pour structurer le code et gérer les erreurs.

Transféré par

ines.rouatbi14
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
750 vues9 pages

Cours Complet Nodejs

Ce cours détaillé sur Node.js couvre l'environnement d'exécution JavaScript côté serveur et son utilisation avec Express.js pour créer des applications backend performantes. Il aborde également des concepts tels que les middlewares, le routage, la gestion de données avec CRUD, l'intégration de MongoDB avec Mongoose, ainsi que des pratiques de développement comme l'utilisation de Docker et la mise en place de microservices. Enfin, il propose des bonnes pratiques pour structurer le code et gérer les erreurs.

Transféré par

ines.rouatbi14
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cours Détaillé Node.

js - Technologies Backend

1. Introduction

• Node.js est un environnement d'exécution JavaScript côté serveur.


• Permet de créer des applications backend très performantes, à base d'événements, non bloquantes
(asynchrones).

2. Express.js

• Express.js est un framework minimaliste pour Node.js.


• Simplifie la création de serveurs HTTP, de routes, de middlewares et d'API REST.

Installation de base :

npm install express

Exemple de serveur :

const express = require('express');


const app = express();

app.get('/', (req, res) => res.send('Hello World'));

app.listen(3000, () => console.log('Serveur écoute sur 3000'));

3. Middlewares Express

• Fonctions qui ont accès à req , res et next()


• S’exécutent entre la réception de la requête et la réponse finale

Types :

• express.json() : Parse le corps JSON


• express.urlencoded() : Formulaire HTML
• express.static('public') : Fichiers statiques

4. Routage

• Utilise app.get() , app.post() , etc.

1
• Utilisation de express.Router() pour modulariser

Exemple avec paramètres et routes complexes :

app.get('/user/:id', (req, res) => {


res.send(`ID utilisateur: ${req.params.id}`);
});

Exemple avec route joker :

app.get('/esprit/n?od+js*_4TWIN', (req, res) => {


res.send('Route joker matchée');
});

5. CRUD avec JSON (sans base de données)

const express = require('express');


const fs = require('fs');
const app = express();
app.use(express.json());

const FILE = './data.json';

function readData() {
return JSON.parse(fs.readFileSync(FILE));
}
function writeData(data) {
fs.writeFileSync(FILE, JSON.stringify(data, null, 2));
}

app.get('/products', (req, res) => {


res.json(readData());
});

app.get('/products/:id', (req, res) => {


const products = readData();
const product = products.find(p => p.id == req.params.id);
if (product) res.json(product);
else res.status(404).send('Not found');
});

app.post('/products', (req, res) => {


const products = readData();

2
products.push(req.body);
writeData(products);
res.status(201).json(req.body);
});

app.put('/products/:id', (req, res) => {


let products = readData();
const index = products.findIndex(p => p.id == req.params.id);
if (index !== -1) {
products[index] = { ...products[index], ...req.body };
writeData(products);
res.json(products[index]);
} else res.status(404).send('Not found');
});

app.delete('/products/:id', (req, res) => {


let products = readData();
const filtered = products.filter(p => p.id != req.params.id);
writeData(filtered);
res.status(204).send();
});

app.listen(3000, () => console.log('Server running on port 3000'));

6. MongoDB avec Mongoose

Installation :

npm install mongoose

Connexion et modèle :

const mongoose = require('mongoose');


mongoose.connect('mongodb://localhost:27017/formations');

const formationSchema = new mongoose.Schema({


titre: String,
duree: Number,
prix: Number
});

const Formation = mongoose.model('Formation', formationSchema);

3
Application avec Express et EJS :

const express = require('express');


const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();

mongoose.connect('mongodb://localhost:27017/formations');

const Formation = require('./model/Formation');


app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/', async (req, res) => {


const formations = await Formation.find();
res.render('index', { formations });
});

app.post('/add', async (req, res) => {


await Formation.create(req.body);
res.redirect('/');
});

app.post('/delete/:id', async (req, res) => {


await Formation.findByIdAndDelete(req.params.id);
res.redirect('/');
});

app.listen(3000, () => console.log('Serveur démarré sur le port 3000'));

Créer un dossier views contenant le fichier index.ejs décrit dans la section EJS.

7. Moteur de vues EJS

Exemple de fichier index.ejs :

<!DOCTYPE html>
<html>
<head>
<title>Liste des formations</title>
</head>
<body>
<h1>Formations</h1>
<ul>
<% formations.forEach(formation => { %>

4
<li>
<%= formation.titre %> - <%= formation.duree %>h - <%= formation.prix
%>€
<form method="POST" action="/delete/<%= formation._id %>">
<button type="submit">Supprimer</button>
</form>
</li>
<% }) %>
</ul>
<form action="/add" method="POST">
<input type="text" name="titre" placeholder="Titre">
<input type="number" name="duree" placeholder="Durée">
<input type="number" name="prix" placeholder="Prix">
<button type="submit">Ajouter</button>
</form>
</body>
</html>

8. Tests avec Mocha, Chai, Supertest

// Voir section précédente pour test API CRUD

Commande d’exécution :

npm test

Script dans package.json :

"scripts": {
"test": "mocha"
}

9. Microservices

Chaque service a son propre serveur Express.

users-service.js

const express = require('express');


const axios = require('axios');
const app = express();

5
app.get('/users', (req, res) => {
res.json([{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]);
});

const PORT = 3002;


app.listen(PORT, async () => {
console.log(`Users Service sur le port ${PORT}`);
await axios.post('http://discovery:3001/register', {
name: 'users',
url: `http://users:3002`
});
});

books-service.js (même principe)

app.get('/books', (req, res) => {


res.json([{ id: 1, title: 'Node.js Basics' }]);
});

10. Discovery Service

discovery-server.js

const express = require('express');


const app = express();
app.use(express.json());

const services = [];

app.post('/register', (req, res) => {


const { name, url } = req.body;
services.push({ name, url });
res.send(`Service ${name} enregistré.`);
});

app.get('/services/:name', (req, res) => {


const service = services.find(s => s.name === req.params.name);
if (service) res.json(service);
else res.status(404).send('Non trouvé');
});

app.listen(3001, () => console.log('Discovery à l’écoute sur 3001'));

6
11. API Gateway

api-gateway.js

const express = require('express');


const axios = require('axios');
const app = express();

app.get('/api/users', async (req, res) => {


const { data } = await axios.get('http://localhost:3001/services/users');
const response = await axios.get(`${data.url}/users`);
res.json(response.data);
});

app.get('/api/books', async (req, res) => {


const { data } = await axios.get('http://localhost:3001/services/books');
const response = await axios.get(`${data.url}/books`);
res.json(response.data);
});

app.listen(3000, () => console.log('Gateway sur 3000'));

12. Docker

Exemple de Dockerfile pour un service Node.js

FROM node:20
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]

Exemple docker-compose.yml pour les services

version: '3'
services:
discovery:
build: ./discovery-service
ports:
- "3001:3001"

7
users:
build: ./users-service
ports:
- "3002:3002"
depends_on:
- discovery

books:
build: ./books-service
ports:
- "3003:3003"
depends_on:
- discovery

gateway:
build: ./api-gateway
ports:
- "3000:3000"
depends_on:
- discovery
- users
- books

Commandes Docker utiles :

docker-compose build
docker-compose up
docker-compose up -d
docker-compose down
docker-compose logs gateway
docker exec -it nom_du_service sh

13. Bonus : Bonnes pratiques

• Structure MVC : séparer les fichiers en models , views , controllers , routes


• Utiliser dotenv pour gérer les variables d'environnement ( .env )

npm install dotenv

require('dotenv').config();

• Utiliser `` pour le développement :

8
npm install --save-dev nodemon

Dans package.json :

"scripts": {
"start": "node app.js",
"dev": "nodemon app.js"
}

• Valider les entrées utilisateur : avec express-validator ou joi


• Gérer les erreurs globalement :

app.use((err, req, res, next) => {


res.status(err.status || 500).json({ message: err.message });
});

Fin du cours Node.js complet

Ce cours résume tous les documents et exercices : Express.js, MongoDB, EJS, CRUD JSON, Docker,
microservices, Gateway, Discovery, tests Mocha/Chai, architecture scalable, avec toutes les corrections de
code incluses.

Vous aimerez peut-être aussi