Express
Installation de l'application Express
Créez une application Express
Coder des serveurs Web en Node pur est possible, mais long et laborieux. L'utilisation du framework Express simplifie ces tâches, en nous permettant de déployer nos API beaucoup plus rapidement.
Pour ajouter Express, exécutez la commande suivante à partir de votre dossier backend :C:\Users\yo> cd C:/projet_full_stack/backend
C:\projet_full_stack\backend> npm install --save express
const express = require('express');
const app = express();
module.exports = app;
Exécutez l'application Express sur le serveur Node
Revenez à votre fichier server.js et modifiez-le comme suit :
Fichier server.jsconst http = require('http');
const app = require('./app');
app.set('port', process.env.PORT || 3000);
const server = http.createServer(app);
server.listen(process.env.PORT || 3000);
Effectuer une demande vers ce serveur générera une erreur 404, car notre application n'a encore aucun moyen de répondre. Configurons une réponse simple pour nous assurer que tout fonctionne correctement, en effectuant un ajout à notre fichier app.js :
Fichier app.jsconst express = require('express');
const app = express();
app.use((req, res) => {
res.json({ message: 'Votre requête a bien été reçue !' });
});
module.exports = app;
Ajoutez des middleware
Une application Express est fondamentalement une série de fonctions appelées middleware. Chaque élément de middleware reçoit les objets request et response, peut les lire, les analyser et les manipuler, le cas échéant. Le middleware Express reçoit également la méthode next, qui permet à chaque middleware de passer l'exécution au middleware suivant.
Fichier app.jsconst express = require('express');
const app = express();
app.use((req, res, next) => {
console.log('Requête reçue !');
next();
});
app.use((req, res, next) => {
res.status(201);
next();
});
app.use((req, res, next) => {
res.json({ message: 'Votre requête a bien été reçue !' });
next();
});
app.use((req, res, next) => {
console.log('Réponse envoyée avec succès !');
});
module.exports = app;
Cette application Express contient quatre éléments de middleware :
- le premier enregistre "Requête reçue !" dans la console et passe l'exécution;
- le deuxième ajoute un code d'état 201 à la réponse et passe l'exécution;
- le troisième envoie la réponse JSON et passe l'exécution;
- le dernier élément de middleware enregistre "Réponse envoyée avec succès !" dans la console.
Il s'agit d'un serveur très simple et qui ne fait pas grand-chose pour l'instant, mais il illustre comment le middleware fonctionne dans une application Express.
Améliorez server.js
Avant d'aller plus loin dans le cours, apportons quelques améliorations à notre fichier server.js, pour le rendre plus stable et approprié pour le déploiement :
Fichier server.jsconst http = require('http');
const app = require('./app');
const normalizePort = val => {
const port = parseInt(val, 10);
if (isNaN(port)) {
return val;
}
if (port >= 0) {
return port;
}
return false;
};
const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
const errorHandler = error => {
if (error.syscall !== 'listen') {
throw error;
}
const address = server.address();
const bind = typeof address === 'string' ? 'pipe ' + address : 'port: ' + port;
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges.');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use.');
process.exit(1);
break;
default:
throw error;
}
};
const server = http.createServer(app);
server.on('error', errorHandler);
server.on('listening', () => {
const address = server.address();
const bind = typeof address === 'string' ? 'pipe ' + address : 'port ' + port;
console.log('Listening on ' + bind);
});
server.listen(port);
- la fonction normalizePort renvoie un port valide, qu'il soit fourni sous la forme d'un numéro ou d'une chaîne;
- la fonction errorHandler recherche les différentes erreurs et les gère de manière appropriée. Elle est ensuite enregistrée dans le serveur;
- un écouteur d'évènements est également enregistré, consignant le port ou le canal nommé sur lequel le serveur s'exécute dans la console.
Notre serveur de développement Node est à présent opérationnel. Vous pouvez ainsi ajouter les fonctionnalités appropriées à l'application Express.