banner
Centre d'Information
Expérience établie en gestion de projets de construction.

Introduction à Nest.js : plus haut

Jul 19, 2023

Par Matthieu Tyson

Architecte logiciel, InfoWorld |

À ne pas confondre avec Next.js, Nest.js est une approche plus récente et unique de la technologie de serveur JavaScript. Il nécessite un serveur familier comme Express ou Fastify et s'appuie sur un certain nombre d'abstractions utiles, destinées à renforcer et à simplifier la conception d'applications de niveau supérieur. Grâce à son mélange distinctif de paradigmes de programmation, de prise en charge TypeScript de premier ordre et de fonctionnalités intégrées telles que l'injection de dépendances, Nest.js n'a cessé de gagner en popularité au cours des dernières années.

Nest.js est une contribution intéressante à l'écosystème JavaScript et mérite votre attention. C'est un excellent outil à garder à l'esprit lorsque vous travaillez avec JavaScript et TypeScript côté serveur.

Dans cet article, nous ferons une visite éclair de Nest.js, avec des exemples incluant le routage, les contrôleurs, les producteurs (injection de dépendances) et l'authentification avec des gardes. Vous découvrirez également le système de modules Nest.js.

Notre exemple est une application permettant de gérer une liste de recettes de pâtes. Nous inclurons un service injecté de dépendances qui gère l'ensemble de données réel et une API RESTful que nous pouvons utiliser pour répertorier toutes les recettes ou récupérer une seule recette par ID. Nous allons également configurer un simple point de terminaison PUT authentifié pour ajouter de nouvelles recettes.

Commençons par échafauder un nouveau projet. Une fois cela fait, nous pouvons nous plonger dans les exemples.

Nous pouvons utiliser l'interface de ligne de commande Nest.js pour configurer une présentation rapide de l'application, en commençant par l'installation globale de Nest avec : $ npm install -g @nestjs/cli. En plus de la commande create, nestjs inclut des fonctionnalités utiles telles que la génération pour le partage de conceptions réutilisables. L'installation à l'échelle mondiale nous donne accès à cela et bien plus encore.

Nous pouvons maintenant créer une nouvelle application avec : $ nest new iw-nest. Vous pouvez sélectionner le gestionnaire de packages de votre choix (npm, fil ou pnpm). Pour cette démo, j'utiliserai pnpm. Le processus est le même peu importe.

Accédez au nouveau répertoire /iw-nest et démarrez le serveur de développement avec : $ pnpm run start. Vous pouvez vérifier que l'application est en cours d'exécution en visitant localhost:3000, où vous devriez voir un message « Hello, World ! » message. Ce message provient de iw-nest/src/app.controller.ts. Si vous regardez ce fichier, vous pouvez voir qu'il utilise un service injecté. Créons un nouveau contrôleur (src/recipes.controller.ts) qui renvoie une liste de recettes, comme indiqué dans le listing 1.

Le listing 1 nous donne un aperçu des bases du routage dans Nest.js. Vous pouvez voir que nous utilisons l'annotation @Controller('recipes') pour définir la classe en tant que contrôleur avec la route /recipes. La méthode getRecipes() est annotée pour gérer la méthode GET avec @Get().

Pour l’instant, ce contrôleur mappe simplement le /recipes GET à une chaîne de réponse codée en dur. Avant que Nest.js ne serve cela, nous devons enregistrer le nouveau contrôleur auprès du module. Les modules sont un autre concept important dans Nest, utilisé pour vous aider à organiser le code de votre application. Dans notre cas, nous devons ouvrir /src/app.module.ts et ajouter le contrôleur, comme indiqué dans le listing 2.

Le framework d'injection de dépendances dans Nest.js rappelle Spring dans l'écosystème Java. Le fait d’avoir à lui seul l’injection de dépendances intégrée rend Nest.js intéressant à considérer, même sans ses autres fonctionnalités.

Nous allons définir un fournisseur de services et le connecter à notre contrôleur. Il s'agit d'un moyen simple de conserver l'application organisée en couches. Vous pouvez voir notre nouvelle classe de service, /src/recipes.service.ts, dans le listing 3.

Pour utiliser ce fournisseur de services, nous devons également l'ajouter au fichier app.module.ts, comme indiqué dans le listing 4.

Les modules sont un bon moyen d'organiser une application. Ils peuvent agir comme un mécanisme de regroupement logique, fournissant une structure hiérarchique où les modules les plus fondamentaux sont clairement définis et les autres en dépendent.

Nous pouvons maintenant utiliser le service dans RecipesController, comme indiqué dans le listing 5. Si vous débutez dans l'injection de dépendances, cela peut sembler beaucoup de travail supplémentaire. Mais la possibilité de définir et d’utiliser des classes à l’échelle de l’application, de manière standardisée, peut s’avérer une véritable aubaine pour l’architecture de votre application à mesure que le système se développe.