Pourquoi j'ai choisi NestJS plutôt que d'autres frameworks NodeJS

Je suis un grand fan de NodeJS pour son approche simpliste. J'utilise Node.js depuis 2015 et Express a été mon framework par défaut de choix pour le prototypage rapide ou l'écriture d'API. Au fil du temps, j'ai joué avec d'autres frameworks Node.js comme sails, koa, loopback, etc..

Mais depuis début 2020 - a vrai dire depuis le premier confinement, j'utilise NestJS et j'ai l'impression d'avoir enfin trouvé le framework que je cherchais depuis longtemps.

Pourquoi j'utilise NestJS

NestJs est conçu pour les monolithes et microservices. Vous pouvez construire des API Rest, des applications MVC, des applications GraphQL, des Web Sockets, ou des CLI, et des jobs CRON avec lui. Comme les applications Nest sont écrites en TypeScript, la détection des erreurs au moment de la compilation protège le code et évite les erreurs lors de l'écriture de plusieurs microservices ayant le même mode de réponse. NestJS permet aux développeurs de construire des microservices étonnants, organisés et légers.

Construit sur la base d'Express, NestJS offre de multiples fonctionnalités et des API prêtes à l'emploi. Les développeurs peuvent exploiter les fonctionnalités de NestJS pour créer des applications avec moins de code.

Framework avec et sans opinion

Express est un framework minimaliste et sans opinion. Les frameworks sans opinion font confiance aux développeurs pour faire le bon choix. Il permet aux développeurs de choisir les outils, les technologies, les connecteurs et hooks qu'ils souhaitent utiliser. Les développeurs structurent leurs codes sans aucune structure spécifique imposée par le framework.

Express étant un framework non-opinionné, il n'est pas livré avec un moteur de template spécifique, un body-parser, un gestionnaire d'erreur, etc. C'est une bonne chose pour un développeur geek. J'adorais cette liberté. Chaque fois que je devais échafauder un nouveau projet, j'avais l'habitude de le décorer avec les outils de mon choix. Mais il est toujours difficile de faire un choix pour une équipe. Si vous avez deux autres développeurs dans votre équipe, l'un peut aimer ejs, l'autre peut aimer blade comme moteur de template. C'est ainsi que chaque projet Express devient unique.

Même au sein d'un grand projet, la structure du projet et l'outillage des différentes équipes de microservices deviennent différents. Voire même galère.

La liberté n'est pas quelque chose que tout le monde mérite. Les frameworks sans opinion permettent aux développeurs de coder n'importe quoi n'importe où. J'ai vu de nombreux projets désordonnés avec des structures de projet bancales.

Nest est un framework avec opinion (la traduction est un peu bizarre mais c'est la seule que je trouve correcte). Il suit le paradigme de conception "convention over configuration"; c'est à dire qu'il guide fortement les développeurs pour qu'ils utilisent certains outils et codent d'une certaine manière. Derrière tout ça, NestJS protège le contrôleur avec un bloc try-catch, analyse le corps de la requête, ajoute un gestionnaire d'erreur, un middleware, un logger, etc. Il n'y a donc pas besoin de faire ces choses courantes à chaque fois qu'il faut commencer un nouveau projet. Et c'est très appréciable.

Ainsi, toute personne familière avec le Nest peut se lancer dans un projet sans passer beaucoup de temps sur la façon dont le code est organisé ou sur les outils utilisés. On est directement amené à travailler sur la fonctionnalité. À moins que vous ne soyez un développeur super créatif dans l'écriture de code, le code d'un projet Nest devrait être beaucoup plus facile à maintenir que celui d'un projet Express sans opinion.

Utilisation des décorateurs et décorateurs personnalisés

Les décorateurs sont une fonctionnalité proposée pour JavaScript. Et Typescript possède déjà cette fonctionnalité. Tous les principaux cadres backend de Java, Python, Php utilisent fortement les décorateurs/annotations. Les décorateurs permettent la programmation de métadonnées, un mécanisme pour modifier les classes, les membres de la classe d'une manière déclarative.

Dans NestJS, je peux lier le contrôleur aux routes, définir la méthode de requête, injecter le corps de la requête ou analyser les paramètres, contrôler l'authentification/les gardes de rôle de manière très efficace avec les décorateurs. Si un attribut d'entrée est requis, s'il faut vérifier l'email ou s'il faut sérialiser un attribut en JSON ou non, tout peut être contrôlé avec des décorateurs (et notamment avec des DTO).

/**
* Un exemple classique d utilisation de décorateurs dans 
* un point d API d un controller
*/
@Get('/me')
@ApiBearerAuth()
@UseGuards(RolesGuard)
@Roles('user', 'admin')
@UseInterceptors(ClassSerializerInterceptor)
async getMe( @AuthUser() user: IAuthUser ): Promise<User> {}

Une architecture similaire à Angular

Du point de vue de l'architecture, NestJS est fortement inspiré par Angular. Il y a des modules, un service, un contrôleur, un pipe, des décorateurs - la syntaxe, l'utilisation et la philosophie correspond exactement à celle d'Angular. Un développeur Angular frontend peut facilement sauter dans le projet NEST backend - en ayant l'impression de travailler dans le même projet.

Avec le même concept et la même philosophie pour le backend et le frontend, c'est du gateau de passer du front au back dans un monorepo (Nx, Lerna) par exemple.

Une Interface de ligne de commande (CLI) bien pensée

NestJS est livré avec sa propre interface de ligne de commande (CLI) qui permet d'initier et d'échafauder un projet rapidement. Grâce à elle, nous pouvons facilement générer des modules, des contrôleurs, des pipes et des middlewares pour faciliter la tâche des développeurs. Ma commande préférée est nest g resource <nom_du_module> qui permet de générer tout un module prêt à l'emploi.

Conclusion

NestJS est l'un des (le ?) frameworks Node.js ayant le plus d'étoiles sur Github - 55k+ étoiles. C'est mérité tant il me semble logique et pratique d'utilisation. Étant un développeur Angular+TypeScript, NestJS était un choix évident.

Vous pouvez en savoir plus sur NestJS en consultant son site officiel et sa documentation

Vous recherchez un développeur Angular/NestJS sur Marseille ou Aix-en-provence ?

Vous êtes au bon endroit. N'hésitez pas à prendre 15 minutes de votre temps pour discuter de votre prochain projet.

Choisir un créneau