Node.js - 3.13 Découper son code Node.js avec require et exports
Une application Node.js grossit vite. Cette leçon montre comment sortir la logique de routage du fichier principal pour la placer dans un fichier séparé. Le fichier principal lance le serveur, tandis que le second fichier décide quoi répondre selon l'URL et la méthode. Le lien entre les deux repose sur le système de modules de Node.js.
Pourquoi séparer le code en plusieurs fichiers
Le fichier app.js lance le serveur, mais il contient aussi les conditions de routage et la réponse par défaut. Pour garder un fichier léger, on déplace cette logique dans un nouveau fichier, route.js.
Le module fs n'est plus utile dans app.js et peut être retiré. Le module http reste nécessaire pour lancer le serveur.
Créer route.js et exporter le gestionnaire
Dans route.js, on crée une fonction gestionnaire de requêtes. Elle reçoit la requête et la réponse en arguments, puis extrait l'URL et la méthode de la requête. Le code de routage est déplacé dans cette fonction.
Pour que le fichier principal puisse l'utiliser, on exporte la fonction avec module.exports.
const requestHandler = (request, response) => {
const url = request.url;
const method = request.method;
// logique de routage
};
module.exports = requestHandler;
Importer le gestionnaire dans app.js
Dans app.js, on importe le fichier avec require. Le chemin commence par ./ pour indiquer un fichier local. Node.js ajoute automatiquement l'extension .js.
Le gestionnaire est ensuite passé au serveur comme gestionnaire, sans parenthèses. On transmet la fonction elle-même, et non son résultat. Après redémarrage du serveur, la page affiche toujours le même résultat.
const routes = require('./route');
Exporter plusieurs éléments
Un fichier peut exporter plusieurs éléments. Une première approche consiste à exporter un objet qui contient le gestionnaire et une valeur de texte brut. Dans app.js, on accède alors à la propriété du gestionnaire.
On peut aussi ajouter les propriétés une à une à module.exports, ou utiliser le raccourci exports. Ces écritures sont équivalentes : elles exportent un seul objet.
Node.js garde le module en cache. Les autres fichiers ne peuvent donc accéder qu'aux valeurs exportées.
En résumé
Node.js permet de répartir le code sur plusieurs fichiers. Le fichier principal lance le serveur et importe le gestionnaire avec require. Le fichier route.js contient la logique de routage et l'exporte avec module.exports. Plusieurs valeurs peuvent être regroupées dans un même objet exporté.
Points clés
- Le fichier principal lance le serveur et reste léger.
- La logique de routage se place dans un fichier séparé.
- module.exports rend une valeur accessible aux autres fichiers.
- require importe le fichier avec un chemin commençant par ./.
- Un objet exporté peut regrouper plusieurs valeurs.
Questions fréquentes
Pourquoi le chemin commence-t-il par ./ ?
Il indique un fichier personnalisé du projet, et non un module de base de Node.js.
Faut-il écrire l'extension .js dans require ?
Ce n'est pas obligatoire. Node.js ajoute automatiquement .js au nom du fichier.
Peut-on modifier un module depuis un autre fichier ?
Non. Le module est mis en cache, et seules les valeurs exportées sont accessibles depuis l'extérieur.