Quels outils et framework pour compléter Node.js?

L'environnement de Node.js comprend des serveurs, des interfaces aux bases de données, des frameworks coté serveur et coté client.

Une vue d'ensemble de l'écosystème Node.js. Ce n'est ni exhaustif ni définitif, au contraire, il s'agit d'un domaine en constant développement.

Node.js et son environnement

Comme on le voit, les principales composantes de l'environnement sont outre l'API Node.js, le backend, les extensions, l'interface avec le client, et le client lui-même, une application ou une page avec éventuellement un framework.

En fait l'interface de divise en une partie serveur et une partie client, et on a une certaine liberté pour en placer l'essentiel sur un coté ou sur l'autre. Voici en détails quelle programmes peuvent être utilisé pour remplir le rôle de chaque composante.

Backend

CommonJS est un projet de création d'une API standard pour le langage JavaScript, avec pour objectif qu'elle soit aussi riche que celle de Java ou autre langage populaire.
On doit pouvoir créer des applications en JavaScript à interface graphique sur le bureau. Le site présente une liste de modules déjà réalisés.
Les standard déjà définies: Modules (utilisé par Node.js), système de fichier, sockets, test, packages, JSGI (une alternative JavaScript à CGI).

Async.js pour passer en mode synchrone ou parallèle. La principale complainte envers Node concerne l'empilement des callback qui vont de pair avec le mode asynchrone, lequel est par ailleurs le principal avantage du système.
Avec Async, on se débarasse des callback et on se rapproche de la simplicité des coroutines du langage Go.

CouchDB est un gestionnaire de base de données stocke des documents sous forme de structures JSON et est intégré comme module à Node.js sous le nom de node-couchdb. Ce format convient bien à un système basé sur JavaScript, car le code JSON peut être parsé automatiquement dans ce langage et convertit facilement en HTML. On peut aussi formuler des requêtes en JavaScript avec CouchDB.
Il peut remplacer MySQL qui est moins adapté à un site Web, même si le second convient pour une application stockant des données telles que login et mot de passe. CouchDB n'est pas plus rapide que MySQL et n'est pas relationnel, toutefois.
Il permet de gérer une documentation et de l'afficher éventuellement avec un template comme le fait Wordpress. Le template Wordpress est en fait du code PHP, qui peut aussi s'utiliser en backend avec Node.js, comme on la démontré sur ce site.

Il y a produits dérivés comme couchbase, un serveur pour mobiles, et d'autres sont en cours. Une alternative est MongoDB, qui stocke aussi des documents au format JSON, est plus rapide mais convient moins bien aux mobiles. CouchDB utilise aussi HTTP et non MongoDB. Voir ce comparatif.

Si vous désirez quelque chose de plus léger, dans le style SQLite (qui fonctionne aussi avec Node.js), mais facile à distribuer avec une application, un gestionnaire écrit lui-même en JS tel que NeDB est la meilleure solution.

Une autre solution à l'heure du choix est d'utiliser une bibliothèque intermédiaire comme Knex.js qui facilite les requêtes et s'interface avec la plupart des BDD.

BinaryJS facilite l'échange de fichiers binaires entre Node et le navigateur, par WebSocket. Peut s'utiliser pour des images ou le streaming audio ou vidéo.

Bower est un gestionnaire de package créé par Twitter pour Node. Il permet d'ajouter dynamiquement des librairies JavaScript, ainsi que des pages ou des images. Il fait de façon dynamique ce que NPM fait de façon statique et permet donc à l'utilisateur de télécharger des composants en option à partir d'instructions JavaScript.

Rendr est un générateur de pages HTML pour une application utilisant Backbone.js. L'application fonctionne de façon dynamique en JavaScript, mais les pages produites sont statiques.

Interface: Frameworks coté serveur

Il aident à créer des pages et ont donc le même rôle que PHP ou ROR. Grâce à ces modules, Node.js peut se substituer à un CMS classique écrit en PHP, Java ou autre langage.

Ils servent de backend aux applications Web, et leurs fournissent les services utiles telle la connexion à une base de donnée.

Framework d'applications Mojito

Il fonctionne sur Linux et est basé sur YUI, mais est transformé en module pour servir de backend à une application en ligne. Le même framework peut être utilisé par le client. Il permet de créer des composants fonctionant sur le serveur ou sur le client.
Le backend se substitue à PHP pour créer les pages et les envoie au navigateur qui les affiche soit statiquement telle quelles, soit dynamiquement avec le code JavaScript de YUI.

Il joue le même rôle que nodeQuery: le framework jQuery sur le serveur, ou que socketStream.

Express ou Hapi.js

Ces deux frameworks ont le même but: simplifier l'utilisation de Node coté serveur, en permettant un code plus intuitif. Ils sont utilisés par de grand sites.

Meteor

Framework d'application web moderne fonctionnant sur le cloud. Permet une mise à jour automatique des pages. Il fonctionne coté client mais avec une interface à Node.js sur le serveur. Comme Express il facilite la création d'application mais ajoute une API pour le code client sur le navigateur. On le compare à Ruby On Rails en version JavaScript. Une spécificité est la capacité de faire les requêtes à la base de donnée dans le code client.
Il n'utilise pas npm, contrairement à Derby, qui est un autre framework MVC, et une autre alternative à RoR.
Meteor ne s'utilise pas facilement avec d'autres frameworks ou interface construits pour d'autres framework. L'application doit être conçue de base pour Meteor.

Il possède son propre protocole de communication entre le client et Node sur le serveur nommé DDP (Distributed Data Protocol) basé sur JSON. Il suffit de déclarer Meteor.publish sur le serveur et Meteor.subscribe sur le client, et le système gère tous les échanges de données automatiquement.
L'utilisation de GraphQL pour les requêtes facilite l'accès à une base de données.

Vous pouvez tester votre code sur un terrain de jeu.

Serveur

Node.js n'est pas un serveur mais un framework permettant de réaliser un serveur de pages ou d'application par un script utilisant l'API qu'il fournit.

Nginx

C'est un serveur qui peut servir de front-end à Node.js sur un hébergement dédié. On l'utilise pour des sites web statique, alors que Node.js seul s'utilise pour des applications en ligne.

Frameworks coté client seuls

Ce sont aussi éventuellement des frameworks coté serveur, s'ils ont une part implémentée dans un module, mais ils sont complété d'une API coté client. Un framework purement client serait quelque chose comme jQuery ou tout autre framework Ajax.

Browserify

En empaquetant le code JavaScript coté serveur dans un fichier que l'on inclut dans un document, on peut utiliser dans celui-ci des objets qui font partie du code serveur. Les commandes require sont alors placées dans le code client et celui-ci peut donc utiliser les objets apportés par les différents modules.

On doit toujours lancer node avec un script serveur, mais celui-ci est réduit, toute la logique est transférés coté client.

Il est extensible, on peut créer un fichier à include pour tout module.

Nightmare

Automatisation d'actions dans le navigateur, en front-end de Phantom.js. Outre le fait qu'il simule le comportement d'un utilisateur, il permet aussi de supprimer les callbacks et d'écrire les processus sous forme linéraire. Phantom n'est pas toutjours stable, selon la version.
Outils similaires: Dalek.js, SeleniumHQ un plugin Firefox.

Node sans navigateur

Des modules pour utiliser Node comme serveur et traiter des données.

Phantom.js

Defini comme un Headless Browser, webkit sans affichage, le but de cet outil est de manipuler des pages web en tâche de fond, ou de créer du contenu HTML ou SVG, grâce au moteur de rendu webkit qui est intégré. L'avantage par rapport à un navigateur est d'avoir un contrôle absolu sur la page comme objet et la façon dont on affiche le contenu.
Phantom.js même s'il inclut un serveur, peut s'utiliser avec Node.js et permet alors d'intégrer WebKit à cet environnement.

On peut en faire un module et l'utiliser conjointement avec Express.js.

Peut-être faut-il ajouter une définition de Headless Browser... Ce n'est pas un navigateur sans tête, mais plutôt un navigateur sans affichage, permettant donc de faire traiter des pages par un programme. On toujours les afficher quand on le veut.

Node-qt

En ajoutant Qt comme module, on peut réaliser une interface qui se passe de navigateur et la relier aux autres modules de Node. Il affiche donc des fenêtres sur le bureau pour présenter un contenu.

Extensions à Node, API spécialisées ou CMS en JavaScript

Le début du CMS basé sur Node.js avec des modules pour créer un blog, statique ou dynamique.

Il y a peu d'hébergement partagés qui offrent un serveur Node.js. Le service pages de Github permet effectivement d'héberger votre application gratuitement. Une autre solution est d'utiliser un serveur virtuel, qui peut s'obtenir pour 5 € par mois.

Wheat

Votre contenu est hébergé sur GitHub. Le module permet de l'afficher comme un site Web. Node-blog par le même auteur est une version spécialisée utilisée pour un site démo qui montre qu'il peut s'utiliser en production.

Petrify

Alternative à HTML, on crée son site localement avec un éditeur de code et après génération des pages, on met à jour le site distant, sur un serveur conventionnel.

API spécialisées

Messenger.js

Un framework pour créer un serveur de messagerie, et communiquer par fichiers JSON.

Utilitaires

ShellJS

Implémentation du shell d'Unix sur Node.js. Permet d'utiliser des commandes que l'on connaît comme mkdir, ls, grep, etc. Ainsi que make. Fonctionne aussi sur Windows.

Dnode

Permet d'exécuter des fonctions sur le serveur, à partir du navigateur.

ElementTree

Pour créer des documents XML, les lire ou les écrire. L'outil de sérialisation Node-Swiz, permet de convertir et sauver des objets au format XML ou JSON, donc aussi convertir entre ces deux formats.