Il y a environ six mois, je cherchais une alternative à SailsJS, un « framework » Model View Controller (MVC) pour NodeJS. Malheureusement, Sails était lent sur les requêtes POST, il ne supportait pas beaucoup de fonctions PostgreSQL comme les transactions et il manquait quelques autres fonctionnalités. Mais le pire, c’est qu’il n’a pas été mis à jour au cours des trois dernières années.
J’ai donc commencé à chercher un autre « framework » pour migrer mes projets NodeJS. J’ai essayé Koa.js (mais il manquait trop de choses), Meteor.js (je n’ai pas vraiment besoin de solution tout-en-un, seulement une API), Loopback (trop de magie) et quelques autres…
Jusqu’à ce que je suis tombé sur AdonisJS. Pour être honnête, même si le framework démarre sur Github (4K stars), ce n’était pas facile à trouver. Mais j’en suis tombé amoureux. Je vais essayer d’expliquer pourquoi.
Avantages
En regardant la structure de dossier et la logique derrière AdonisJS, il est presque identique à un « framework » PHP super populaire : Laravel. Et Laravel a une bonne structure réfléchie, qui vous permet de garder les choses claires. Donc, si vous avez déjà travaillé avec, vous apprendrez rapidement Adonis.
Son ORM (Object-Relational Mapping) est conçu pour les bases de données SQL, telles que Postgres ou MySQL. Il crée des requêtes SQL efficaces et est basé sur l’”active record pattern“. Son générateur de requêtes est facile à apprendre et nous permet de créer rapidement des requêtes simples. Par exemple :
const cars = await Car.query().whereIn(‘locationId’, locationIds).with(‘locks’).orderBy(‘label’, ‘asc’).fetch()
Mais même lorsque nous avons besoin de choses plus compliquées comme des migrations, des transactions, des jointures ou des requêtes complètement « en langage SQL natif », tout est là et facile à utiliser. Quant aux amoureux de MongoDB, AdonisJS le soutient aussi !
AdonisJS possède également une extension de validation pratique et facilite l’écriture de règles, par exemple :
const validation = await validate(data, { username: ‘required|max:20|unique:users’, email: ‘required|max:254|email|unique:users’, password: ‘required|strongPassword’, password_confirmation: ‘required_if:password|same:password’ }) if (validation.fails()) { return response.send(validation.messages()) }
Ces vérifications peuvent être à la fois « synchrones » ou « asynchrones », peuvent accéder à la base de données et il peut être étendu très facilement, par exemple, j’ai écrit une vérification pour prouver qu’un mot de passe est fort.
Le TDD (Test-Driven Development) ou en Français « développement piloté par les tests » est une technique de développement de logiciel qui préconise d’écrire les tests unitaires avant d’écrire le code source d’un logiciel. AdonisJS pratique le TDD et je pense que c’est une bonne philosophie à prendre en compte pour vos prochains développement !
Inconvénients
Comme il n’y a pas beaucoup de contributeurs et d’utilisateurs, vous pouvez parfois attraper un « bug » dans les bibliothèques principales. Certains d’entre eux sont assez évidents.
Même si les documentations sont bonnes, la communauté est encore petite. Il n’y a pas beaucoup de réponses sur StackOverflow et il n’y a pas beaucoup de tutoriels.
En conclusion
J’utilise AdonisJS en production depuis six mois. C’est stable et rapide. J’aime ça ! Si vous cherchez un framework NodeJS moderne avec ES6, le support Postgres et une bonne structure, passez chez AdonisJS.