What tools and frameworks to complement Node.js?

The Node.js environment includes servers, interfaces to databases, server-side and client-side frameworks.

An overview of the Node.js ecosystem. It is neither exhaustive nor definitive, on the contrary, it is an area in constant development.

Node.js and its environment

As seen, the main components of the environment besides Node.js API are the backend, extensions, interface with the client and the client itself, an application or a page with a possible framework .

In fact the interface is divided into a server part and client part, and we have some freedom to place the essential on one side or the other. Here are details on how programs can be used to fill the role of each component.

Backend

CommonJS is a project to create a standard API for JavaScript, with the aim that it be as rich as that of Java or other popular language.
It must be possible to create GUI applications in JavaScript on the desktop. The site presents a list of modules already completed.
The standard already defined: modules (used by Node.js), file system, sockets, test, package, JSGI (a JavaScript alternative to CGI).

Async.js to move to parallel or in synchronous mode if you want. The main complaint against Node is stacking all the callbacks that go along with the asynchronous mode, which is also the main advantage of the system.
With Async, you get rid of callbacks and we get closer to the simplicity of the Go language coroutines

CouchDB database is a database manager which stores documents as JSON structures and is integrated as a module to Node.js as the node-couchdb. This format is well suited to a system based on JavaScript, because the JSON code can be automatically parsed in this language and easily converted into HTML. One can also formulate queries with CouchDB in JavaScript.
It can replace MySQL which is less suitable for a website, even if the second application is suitable for storing data such as login and password. CouchDB is slower than MySQL and is not relational, however.
It can manage documentation and possibly with a view template as does Wordpress. Wordpress template is actually PHP code, which can also be used in backend with Node.js, as it is shown on this site.

There are products like couchbase, a mobile server, and others are underway. An alternative is MongoDB, which also stores documents to JSON, is faster but less suitable for mobile. CouchDB uses HTTP but not MongoDB. Look at this compararison.

If you want something lighter, in the SQLite style (which also works with Node.js), but easy to distribute with an application, a manager himself wrote in JS as NeDB is the best solution.

Bower is a package manager for Node created by Twitter. It allows you to dynamically add JavaScript libraries, as well as pages or images. It makes dynamically what NPM does statically and therefore allows the user to download optional components from JavaScript statements.

Rendr is a HTML page generator for an application using Backbone.js. The application works dynamically in JavaScript, but the pages produced are static.

Interface: Server-side frameworks

Help to create pages and therefore have the same role that PHP or ROR. With these modules, Node.js can replace a conventional CMS written in PHP, Java or other language.

They serve as backend for web applications, and provide useful services such as connection to a database.

Application framework Mojito runs on Linux and is based on YUI, but is transformed into a backend module for use in an online application. The same framework can be used by the client. It creates components running on the server or the client.
Replaces the PHP backend to create the pages and sends them to the browser that displays either statically as they are, or dynamically with the JavaScript YUI.

It plays the same role as nodeQuery: the jQuery framework on the server, or socketStream.

Express or Hapi.js

Both frameworks have the same goal: simplify the use of Node server side, enabling a more intuitive code. They are used by large sites.

Meteor is a modern web application framework running on the cloud. It allows automatic updating of pages. It works client side but with an interface to Node.js on the server. As Express.js it facilitates the creation of application but adds an API for client code on the browser. It is compared to Ruby on Rails in JavaScript version. Its specificity is the ability to query the database in the client code.
It does not use npm, unlike Derby, which is another MVC framework, and another alternative to ROR.
Meteor can't be used easily with other frameworks or interfaces built for other frameworks. The application must be designed with Meteor from the ground. It can also be slow when the audience expands.

It has its own protocol for communication between the client and Node.js on the server named DDP (Distributed Data Protocol) based on JSON. Just declare Meteor.publish on the server and Meteor.subscribe on the client, and the system manages all data exchanges automatically.

Meteor and Qt: By combining Qt for the native look and Meteor for interacting with Web users, you can build native-like but portable apps. We can of course do this more simply with Electron.

Server

Node.js is not a server but a framework to achieve a page server or application by a script using the API it provides.

Nginx is a server that can serve as a front-end to Node.js on a dedicated hosting. It is used for static websites, while Node.js alone is used for online applications.

Client side only frameworks

They are also possibly server side framework, if they have a part implemented in a module, but they are supplemented by a client side API. A framework purely client would be something like jQuery or any other Ajax framework.

Browserify, by packaging the server-side JavaScript code in a file that is included in a document, allows you to use it in objects that are part of the server code. require statements are then placed in the client code and it can therefore use the functions of their modules.

We must always start with a node server script, but it is reduced, all the logic is moved client side.
It is extensible, you can create a file to include for any module.

Nightmare

Actions automation in the browser, front-end to Phantom.js. Besides the fact that it simulates the behavior of a user, it also eliminates callbacks and write processes in linear form. Phantom is not toutjours stable depending on the version.
Similar tools: Dalek.js, SeleniumHQ a plugin for Firefox.

Node without a browser

Modules for use Node as a server and processing data.

Phantom.js

Defined as a headless browser, the purpose of this tool is to manipulate web pages in the background, or create HTML or SVG content, thanks to the webkit rendering engine that is integrated. The advantage over a browser is to have absolute control on the page as an object and how it displays the contents.
Phantom.js even if it includes a server, can be used with Node.js and then allows to integrate WebKit in this environment.
In March 2018, the project was archived and its development stopped with a lot of unresolved bugs. It is replaced by Chrome Headless.

Maybe we should add a definition of Headless Browser... This is not a browser without head, but without a display, thus allowing to process pages with a program. You can still show them when you want.

Node-qt

By adding Qt as a module, you can create an interface that displays windows on the desktop to present content and is browser-free while using the other modules of Node.

Making an executable

Several tools are available to transform a Node application with all its modules into a single executable program, easy to install:

Node extensions, JavaScript CMS or specialized APIs

The beginning of Node.js based CMS with modules to create a blog, static or dynamic.

There are few shared hosts that offer a Node.js server. The Github pages service can effectively host your application for free. Another solution is to use a virtual server, which can be obtained for € 5 per month.

Wheat

Your content is hosted on GitHub. The module allows to display it as a website. Node-blog by the same author is a specialized version used for a demo site that shows it can be used in production.

Petrify

Alternative to HTML, you create your site locally with a code editor and after page generation, we update the remote site, on a conventional server.

Specialized API

Messenger.js

A framework to create a mail server, and communicate via JSON.

Natural

Tools for natural language processing as a module integrating many algorithms. By adding the module to an application, to access these methods to process text entries and interpret them.
This can be supplemented by Sentimental, a recognition module feelings to make programs more responsive.

Utilities and tools

ShellJS

Implementation of the Unix shell on Node.js. Allows the use of commands that we know as mkdir, ls, grep, etc. As well as make. Also runs on Windows.

ElementTree

To create XML documents, read or write. The serialization tool Node-Swiz, can convert and save objects to XML or JSON, so also convert between these two formats.