Votre serveur web sous NodeJS

Implémentez rapidement un serveur web sous nodeJS et découvrez le framework web Express

Nous allons être amenés, dans des articles à venir, à évoquer nombre de librairies frontend. Aussi il parait indispensable de faire un point dès à présent sur la façon d'implémenter un serveur web.
Nous allons, pour ce faire, commencer par développer le serveur le plus simple qui soit, puis ensuite, implémenter le même via le framework express, et voir ce que celui-ci peut nous apporter.

Serveur web basique

Implémenter un serveur web va consister à invoquer la méthode createServer de l'interface http en prenant soin d'initialiser un certain nombre de messages d'en-tête à destination du navigateur. Par ailleurs, nous allons initier un démon d'écoute sur un port choisi arbitrairement. Pour l'exemple, nous associerons notre serveur au port 3280 sur notre machine locale (adresse ip 127.0.0.1).
Dans un nouveau fichier source serveur_simple.js nous implémentons notre serveur ainsi :


const http = require('http');
const host = '127.0.0.1';
const port = 3280;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Le serveur web fonctionne !');
});

server.listen(port, host, () => {
  console.log(`Server running at http://${host}:${port}/`);
});

Puis nous le lançons via la ligne de commande et obtenons, si tout va bien, un message en retour nous indiquant que le serveur tourne et écoute le port 3280 :


node serveur_simple.js
Serveur running at http://127.0.0.1:3280/

Il ne nous reste plus qu'à nous rendre dans un navigateur internet puis d'accéder à l'adresse http://127.0.0.1:3280/ pour découvrir ceci :

Le serveur web fonctionne !

Tout ça pour ça, me direz-vous. Effectivement, mais notre objectif est rempli, le serveur fonctionne. Sans parler de contenu, que nous verrons ultérieurement à l'heure d'évoquer la data visualisation via D3js par exemple, que pouvons-nous attendre d'un serveur web ?
Nous allons à coup sur être amenés à implémenter un routage qui permettra à l'utilisateur d'accéder a diverses parties de notre application via des adresses différentes. Nous pourrions aussi développer une API que nous permettra de renvoyer simplement des données brutes. Tout ceci peut s'apparenter à des fonctionnalités techniques qui, au lieu d'être réécrites de toute pièce peuvent être importées via des frameworks. Nous allons, dans la suite de cet article, évoquer le framework web express.

Serveur web basique, sous express

Commençons par réécrire notre précèdent serveur en utilisant cette fois le framework express. Il nous faut, au préalable importer la librairie express :


npm install express --save

Ceci étant fait, implémentons notre serveur, dans un nouveau fichier source serveur_express.js :


const express = require('express')
const server = express()

const host = '127.0.0.1';
const port = 3280;

server.get('/', (req, res) => {
  res.send('Le serveur web express fonctionne !')
})

server.listen(port, host, () => {
  console.log(`Server running at http://${host}:${port}/`);
});

Nous voyons, dans le code ci-dessus, que nous n'avons plus besoin d'invoquer directement la création de l'instance via createServer car celle-ci est réalisée via l'appel au constructeur express. Par ailleurs, si l'écoute du port ne change pas, nous avons en revanche un premier routage vers la racine du serveur qui nous renvoie notre message. Lançons à présent notre serveur :


node serveur_express.js
Serveur running at http://127.0.0.1:3280/

L'accès, via un navigateur internet, à l'adresse http://127.0.0.1:3280/ nous permet de découvrir ceci :

Le serveur web express fonctionne !

Routage

Nous avons évoqué le routage précédemment, en voici un exemple. Reprenons le code de notre serveur express et ajoutons lui deux routes supplémentaires :


const express = require('express')
const server = express()

const host = '127.0.0.1';
const port = 3280;

server.get('/', (req, res) => {
  res.send('Bienvenue a la racine !')
})

server.get('/dashboard1', (req, res) => {
  res.send('Premier tableau de bord de notre analyse !')
})

server.get('/dashboard2', (req, res) => {
  res.send('Second tableau de bord de notre analyse !')
})

server.listen(port, host, () => {
  console.log(`Server running at http://${host}:${port}/`);
});

Comme vous pouvez le constater, nous avons modifier le message de la sortie associée à la racine, puis ajouter deux routes. Ainsi, après lancement du serveur, si l'utilisateur se rend à l'adresse http://127.0.0.1:3280/dashboard1, il aura en sortie une vue propre au tableau de bord qu'il a requêté.
Nous commençons à percevoir les prémices d'un modèle MVC. Express fait, bien entendu bien plus que cela, et nous vous invitons à découvrir toute l'étendue de ce que propose ce framework directement sur le site qui lui est dédié à l'adresse https://expressjs.com/


Retrouvez dans la rubrique "Nos datasets" toutes les données dont vous aurez besoin pour tester et pratiquer !