4. Installer un Middleware déjà existant

Précédemment, on a créé notre propre Middleware, qui était chargé d’afficher l’url des requêtes entrantes vers notre API Rest, ce qui est plutôt pratique pour déboguer à la main.

Cependant, il s’agit d’un comportement assez commun, et il doit sûrement exister des Middlewares proposant déjà ce genre de service, et en mieux… Ce serai dommage de réinventer la route !

Et ça tombe bien, car il existe un Middleware nommé Morgan, qui s’occupe de la même chose que notre Middleware « maison ». On sera en mesure de loger dans le terminal de commande toutes les requêtes entrantes vers notre API Rest, mais en plus aboutie, et surtout sans taper une seule ligne de code.

Au fait, ne me demandez pas pourquoi ce Middleware se nomme Morgan, c’est un nom complétement arbitraire j’imagine !  😇

Pour commencer, installons le Middleware Morgan, qui n’est rien d’autre qu’un module JavaScript comme un autre :

npm install morgan --save-dev

Vous remarquez que l’on installe cette dépendance uniquement dans les dépendances de développement, grâce à l’option —save-dev. En effet, le fait de remonter des informations dans notre terminal de commande est surtout utile pour le débogage en local dans un premier temps. Une fois que notre API Rest sera déployée en production, nous n’aurons plus besoin du paquet Morgan.

En fait, le paquet Morgan n’est pas exactement un module JavaScript comme les autres. C’est un module spécifiquement conçu pour être utilisé comme un Middleware dans votre code. Concrètement, une fois importé, vous pourrez appliquer Morgan directement : app.user(morgan).

Côté code, après avoir installé la dépendance, il nous reste encore à l’importer dans notre fichier app.js :

// Les autres importations...
const morgan = require('morgan')
 
const app = express()
const port = 3000
 
// Avant, sans le paquet Morgan : 
app.use((req, res, next) => {
  console.log('URL : ' + req.url)
  next()
})
 
// Après, avec la paquet Morgan : 
app.use(morgan('dev'))
 
// ...

Une fois que nous avons importé la dépendance morgan à la ligne 2, il faut nous débarrasser de notre ancien Middleware. Ensuite, nous pouvons utiliser la dépendance Morgan.

On retrouve l’utilisation de la méthode use() pour attacher un Middleware à notre API Rest Express. On peut également paramétrer Morgan en fonction du détail des messages de logs que l’on souhaite afficher. Ici, nous passons l’option « dev« , car nous souhaitons optimiser l’affichage des messages de logs pour la phase de développement, et le débogage.

Le code est plutôt concis comme vous pouvez le voir, c’est assez agréable. 😇

Et puis le plus important maintenant !

Si vous retournez dans votre terminal de commande, vous pourrez apercevoir les magnifiques messages affichés par Morgan, lorsque vous appelez l’API Rest de pokémons :

On retrouve le type de la requête HTTP entrante, son URL, et même le code de statut en couleur ! (Mais si, rappelez-vous, c’est le fameux code que l’on doit aborder plus tard 👍).

On a désormais moins de code dans notre API Rest, et on obtient pourtant un résultat supérieur. Parfait, c’est le genre de nouvelle qu’on apprécie en tant que développeur !