Apprendre 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.

Icône de calendrier
Intermédiaire
7 chapitres

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() :

copié !
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.

copié !
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.).

copié !
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.

copié !
// 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.

copié !
// 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.

copié !
// 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.

copié !
// 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.

copié !
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'
}
copié !
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.

copié !
const urlObj = {
	protocol: 'https:',
	hostname: 'example.com',
	pathname: '/path/demo/',
	query: {
		foo: 'toto',
		bar: 'titi',
	},
};
const myUrl = url.format(urlObj);