Profile Floris Robart

NodeJS Node.js est un environnement d'exécution JavaScript côté serveur open-source qui permet aux développeurs de créer des applications web évolutives et performantes.

Ma définition

Node.js est un environnement d'exécution JavaScript côté serveur qui permet de créer des applications web évolutives et performantes. Il repose sur le moteur V8 de Google Chrome pour exécuter du JavaScript hors navigateur. Node.js est particulièrement adapté aux applications temps réel, aux API RESTful, aux flux (streaming) et aux services nécessitant une forte scalabilité.

À première vue, Node.js peut surprendre car il utilise JavaScript, un langage parfois critiqué pour son historicité et ses pièges. Pourtant, Node.js a su tirer parti de la popularité et de l'écosystème JavaScript pour devenir l'un des environnements serveur les plus utilisés dans le développement web.

Les grandes forces de Node.js sont sa rapidité et sa capacité à gérer un grand nombre de connexions simultanées grâce à son modèle d'exécution non bloquant, orienté événements. De plus, Node.js dispose d'un écosystème riche de modules et de bibliothèques via le gestionnaire de paquets npm, ce qui facilite le développement d'applications web complexes et robustes. Node.js se met très facilement en production, parfois en une seule commande, sans configuration particulière, ce qui en fait un choix apprécié des développeurs souhaitant livrer rapidement des applications, contrairement à certains environnements serveur nécessitant des configurations plus lourdes comme Apache ou Nginx.

Le graphique ci-dessous compare les performances de plusieurs langages. Selon les cas d'usage, Node.js peut être plus performant que des langages interprétés comme PHP ou Python, tandis que des langages compilés comme Java peuvent offrir des performances supérieures dans d'autres scénarios. Le choix dépend donc des exigences fonctionnelles et opérationnelles : Node.js propose un bon compromis entre performance, productivité et richesse d'écosystème pour de nombreuses applications web.

Graphique comparant les performances de différents langages de programmation

TypeScript a aussi largement contribué à l'adoption de Node.js, corrigeant l'un des principaux défauts de JavaScript : l'absence de typage statique. TypeScript permet de détecter des erreurs à la compilation, d'améliorer la lisibilité et la maintenabilité du code, et d'augmenter la productivité grâce à l'autocomplétion et aux outils de refactorisation.

Personnellement, j'utilise systématiquement TypeScript, même pour de petits projets, car il améliore la qualité du code et la productivité. De nombreux frameworks populaires (Express, NestJS, Next.js, Zod) sont pleinement compatibles avec TypeScript, ce qui facilite grandement son adoption.

Mes éléments de preuve

Comme pour Flutter, Node.js est une compétence que j'ai largement mise en pratique, tant sur des projets personnels que professionnels. J'ai principalement utilisé Node.js pour construire des API RESTful, mais aussi pour des tâches d'automatisation comme la génération automatique de ma liste de projets à partir d'enregistrements DNS.

Parmi mes réalisations en Node.js : Econoris, Flollylist, FlorAccess, Flower Garden, Genesis et Nexus (API pour la configuration des passerelles Qowisio).

Ces applications partagent la même architecture de base, sont écrites en TypeScript et sont déployées avec Docker. Ce choix vise un workflow uniforme, rapide et facile à maintenir, permettant de se concentrer sur la logique métier plutôt que sur la configuration de l'environnement.

Je détaille ici Nexus : il s'agit de l'évolution d'une API historique (Qowisio) originellement écrite en JavaScript. L'ancienne version mélangeait plusieurs API et manquait de conventions. Pour Nexus, j'ai identifié et isolé les points d'entrée pertinents, puis réécrit la logique en TypeScript dans une nouvelle API plus propre et maintenable. La documentation complète de l'architecture est disponible ici : architecture d'une API Node.js + TypeScript.

Flower Garden diffère car ce n'est pas une API : c'est un site statique listant automatiquement mes projets. L'application interroge les enregistrements DNS du domaine, filtre les entrées pertinentes (A, CNAME), récupère les métadonnées Open Graph de chaque cible (titre, description, favicon), puis génère une page HTML statique. Le processus est déclenchable via une URL dédiée et met à jour la liste.

Ce projet montre la vitesse et la flexibilité de Node.js : la même architecture permet de construire des APIs et des sites statiques avec peu d'effort, en restant cohérent dans les choix techniques.

Notez que pour ce portfolio j'ai choisi Astro : il utilise Node.js pour le développement et la génération, mais génère un site statique static qui n'exige pas Node.js en production. C'était le meilleur compromis pour les performances et la simplicité d'hébergement.

Mon autocritique

Grâce à mes expériences, je maîtrise bien Node.js et je suis capable de concevoir différents types d'applications web rapidement et efficacement. Toutefois, je peux encore m'améliorer sur les tests unitaires et les solutions de monitoring/logging en production.

J'utilise déjà des outils de logging (par exemple Morgan), mais mon dispositif d'alerte est artisanal. Je souhaite mettre en place une solution de monitoring complète pour détecter les incidents en temps réel, disposer d'alertes précises et analyser les logs efficacement. L'adoption future de Kubernetes facilitera l'intégration de solutions de monitoring et de logging.

C'est une évolution que j'envisage lors de l'adoption de Kubernetes, qui offre des fonctionnalités intéressantes pour le monitoring et le logging en production.

Mon évolution dans cette compétence

Node.js reste une compétence essentielle pour le développement web. J'ai fait d'importants progrès récemment (architecture, TypeScript, bonnes pratiques) et je continuerai à apprendre de nouvelles techniques et outils pour améliorer la qualité de mes applications.