Image de couverture

Meteor et Sails, des frameworks back-end pour Node

Par Romain FRANÇOIS | Créé le 20/05/2018 | Modifié le 08/06/2018

Au même titre que nous utilisons des frameworks tels que Symfony ou Laravel sur des projets PHP, il est possible et même très utile d'utiliser des frameworks back-end pour Node, ce dernier étant bas niveau. La liste est longue, mais je ne citerai que les deux frameworks que j'ai eu l'occasion d'expérimenter. Il s'agit de Sails.js et Meteor.js.

Node + Sails

A première vue, Sails.js semble être un framework très intéressant parce qu'il est construit selon l'architecture MVC. Il est très facile pour un développeur PHP de passer de Symfony à Sails. En revanche Sails propose beaucoup moins de fonctionnalités que le géant Symfony, ce qui est normal vu l'âge de ce dernier et sa reconnaissance mondiale. Vous ne disposerez par exemple pas de classes pour créer facilement vos formulaires, vous devrez les créer à la main comme au bon vieux temps. Dans les faits, vous pouvez disposer de cette fonctionnalité si vous téléchargez un plugin de Sails via NPM. Plugin qui ne sera pas programmé par les développeurs de Sails mais par la communauté, ce qui peut s'avérer être un problème puisque le plugin se révélera incompatible avec certaines de vos exigences.

J'ai essayé de télécharger un plugin de pagination, il fonctionnait très bien avec des requêtes toutes simples, par exemple paginer une liste d'articles de blog. En revanche, imaginons que vous vouliez réaliser une jointure sur cette requête, pour afficher par exemple l'auteur d'un article, jusque là tout va bien ! Mais si je demande au plugin de n'afficher que les articles de l'auteur Romain FRANCOIS, le plugin de pagination ne permettra pas de le faire. Ce qui revient à coder vous même une fonction de pagination ou à modifier vous-même le code du plugin.

Il m'est important de mentionner que Sails utilise l'ORM Waterline. J'ai remarqué que certaines requêtes avec Waterline fonctionnaient avec MongoDB mais pas avec MySQL. Un soucis qui s'avère embêtant mais qu'il est néanmoins possible de contourner en créant soi-même la requête SQL. Contourner le problème de la sorte vous causera tout de même le problème de l'hydratation de vos objets... Il est écrit sur la page d'accueil de Sails l'affirmation suivante.

Sails is compatible with any front-end: Angular, React, iOS, Android, Windows Phone, custom hardware, or something else entirely.

Ce n'est pas faux, mais ils oublient de dire que ce n'est absolument pas pratique, contrairement au framework que je vous présenterai ensuite. Je n'ai personnellement pas réussi à faire fonctionner React avec Sails. Certains développeurs ont déposé leur projet React + Sails sur Github mais ils ne datent pas de la dernière pluie. Pour faire cohabiter le plus simplement possible ces deux fauves ensemble, il semble nécessaire de créer une application React pour le front et une API Rest Sails (Sails permet de faire du front et du back). Ce qui pourrait être sympathique si le système de création de Rest API de Sails ne divulguait pas des champs tels que l'id, les mots de passe cryptés, les dates de création... Il est bien-sûr possible de cacher ces éléments d'une manière un peu douteuse, mais ils seront tout de même chargés dans la requête SQL. Ce qui implique des pertes de performance. Ou alors, il est possible d'overrider les fonctions et de créer des requêtes en ne sélectionnant que les champs désirés, en espérant ne pas rencontrer de problème avec l'ORM comme mentionné plus haut.

Node + Meteor

Le framework que je vais à présent vous présenter est plus difficile à prendre en main pour un développeur PHP. Il ne s'agit pas ici d'architecture MVC toute faite dans laquelle vous n'avez plus qu'à programmer. Une architecture de base est bien présente mais elle est minime, vous établirez l'architecture vous même probablement en fonction des frameworks front que vous choisirez.

Je remarque sur internet que MongoDB détient toutes les faveurs des développeurs Javascript. La preuve, Sails fonctionne mieux avec MongoDB qu'avec MySQL et Meteor ne fonctionne qu'avec MongoDB, il existe des plugins pour l'utiliser avec MySQL, mais j'ai préféré la stabilité et le tester sans SQL.

Le plus déroutant est que le framework n'utilise, pour faire ses requêtes, que les sockets. Vous ne pourrez donc pas voir les requêtes arrivant dans la console de votre navigateur au fur et à mesure des interactions que l'internaute effectue sur la page. Il est ainsi très intuitif de créer une application en temps réel avec Meteor.

Et pour une application en temps réel, quoi de mieux que des frameworks comme React ou Angular ? En ce qui me concerne, j'ai essayé de faire cohabiter React et Meteor et j'ai été très satisfait du résultat. Inutile de créer deux applications différentes, vous n'aurez besoin que d'importer React dans votre appli Meteor pour que les deux fonctionnent ensemble. La création d'application isomorphique s'en trouve d'autant plus simplifiée ! Même si la plupart des documentations ne mentionnent le SSR (Server-Side Rendering) qu'avec du Node natif. C'est-à-dire qu'il est possible de créer ce type d'application avec Node sans framework back-end, mais vous sacrifiez dans ce cas nombre de fonctionnalités utiles incorporées dans Meteor.

En bref, l'isomorphisme permet de générer les vues aussi bien du côté client que du côté serveur. Lorsque vous créez une application avec React, le rendu est généré côté client, ce qui peut être un problème en termes de SEO. Si vous créez votre application React avec Meteor, le rendu sera généré une première fois côté serveur, puis le serveur transmettra ses variables au client pour qu'il ne régénère pas la page inutilement. Au lieu de cela, la page sera régénérée par le client si une mise à jour se produit.

Conclusion

Bien que Meteor et Sails soient sortis en même temps en 2012, ce dernier ne semble pas encore assez mature. J'espère que les imperfections qui m'amène à cette conclusion seront corrigées dans les années à venir, parce qu'il s'agit tout de même d'un outil intéressant. Je vous laisse le soin de lire cet article qui ne mâche pas ses mots sur les défections de Sails et de son ORM. Sans surprise, entre les deux solutions que j'ai détaillé, le framework back-end le plus adapté selon moi pour travailler avec Node est Meteor.