Formation Node.js | Analyser une URL
L'analyse des URLs entrante dans une application est quasi inévitable. Les modules url et queryString sont là pour nous faciliter la tâche.
Modules url
et queryString
Chaque requête HTTP envoyé au serveur correspond à une URL, le traitement d’URL est ainsi un passage obligatoire dans la création d’une application web en tout genre.
Node.js nous propose en ce sens les Core Modules url
et queryString
, dédiés à leur exploitation. Ces modules bénéficient de méthodes permettant de construire des URLs et d’en extraire des informations, comme par exemple :
- Le protocole
- Le nom d’hôte
- Le chemin
- La chaîne de requête
Le modules url
et queryString
sont des modules intégrés de Node.js, il n’ont donc pas besoin d’être installés séparément. Il peuvent être inclus dans une application Node.js en utilisant la fonction require()
:
const url = require('url');
const querystring = require('querystring');
Récupérer une URL
Pour rappel, l’URL demandée par une requête HTTP est accessible via l’objet req
au sein du requestListener
.
const server = http.createServer((req, res) => {
const myUrl = req.url;
// ...
});
Accéder aux composants d’URL
La méthode url.parse()
permet d’analyser les différents composants d’une URL (protocole, hôte, chemin, etc.).
const url = require('url');
const myUrl = req.url;
const parsedUrl = url.parse(myUrl);
Les propriétés de l’objet retourné par url.parse()
permettent de récupérer les différents composants de l’URL.
Protocole
La propriété protocol
permet de récupérer le protocole de l’URL.
// https://example.com/path/demo?foo=toto&bar=titi
console.log(parsedUrl.protocol); // 'https:'
Nom de domaine
La propriété host
permet de récupérer le nom de domaine de l’URL.
// https://example.com/path/demo?foo=toto&bar=titi
console.log(parsedUrl.host); // 'example.com'
Chemin
La propriété pathname
permet de récupérer le chemin de l’URL.
// https://example.com/path/demo?foo=toto&bar=titi
console.log(parsedUrl.pathname); // '/path/demo/'
Chaîne de requête
La propriété query
permet de récupérer la chaîne de requête de l’URL.
// https://example.com/path/demo?foo=toto&bar=titi
console.log(parsedUrl.query); // 'foo=toto&bar=titi'
Vous remarquez ici que la chaîne de requête est récupérée sous forme de chaîne de caractères contenue dans l’URL. Vous conviendrez que son format n’est pas idéal pour une exploitation en JavaScript.
C’est là qu’entre en jeu le module queryString
.
La méthode querystring.parse()
permet de transformer une chaîne de requête en un objet JavaScript.
const querystring = require('querystring');
const parsedQuery = querystring.parse(parsedUrl.query);
Les propriétés de l’objet retourné par querystring.parse()
permettent de récupérer les différentes valeurs de la chaîne de requête :
{
foo: 'toto',
bar: 'titi'
}
console.log(parsedQuery.foo); // 'toto'
console.log(parsedQuery.bar); // 'titi'
Construire une URL
La méthode url.format()
permet de construire une URL en définissant ses différents composants au sein d’un objet JavaScript.
const urlObj = {
protocol: 'https:',
hostname: 'example.com',
pathname: '/path/demo/',
query: {
foo: 'toto',
bar: 'titi',
},
};
const myUrl = url.format(urlObj);