Node.js has taken off, with many leading-edge web developers using it as the backend for their prototype systems. What has helped propel that adoption is a functional ecosystem of reusable libraries. NPM, the Node Package Manager, currently lists over 4,400 packages, with popular packages such as utility libraries such as Underscore, simplifying libraries such as request, and template engines such as Jade. One library which is responsible for the wider use of Node.js is Socket.io: this implements real time connectivity between clients and servers by automatically selecting the appropriate connection technology, be it WebSockets, AJAX polling, AJAX streaming or others, depending on the capabilities of the browser. This library makes creating dynamic web applications much easier by removing the complexity of sniffing browsers and managing connections and has, therefore, been picked up by developers who want to prototype those new dynamic web applications.
The most recent addition to the Node.js ecosystem is the arrival on Node.js 0.6.0 which is the first release of Node with a native Windows port. This has the potential to expand Node usage even further.
Pros and cons
People often say that Node.js is scalable, but for Node.js there's a specific meaning to that: Node.js, in and of itself, makes good use of a single core of a processor when handling I/O bound tasks, more so than many other techniques. But when you want to use more cores, or when you want more systems running a Node.js application, you have to fall back on more traditional scaling: running the Node.js application on many cores or systems and putting a load-balancing web server in front of it to distribute that work around. So while it is possible to scale Node.js across networks, developers end up implementing the same web server infrastructure as they would with any other underlying backend technology. That said, Node.js's efficient exploitation of each core could lead to less need for so much distributed infrastructure.
Next, for those who want to delve deeper, we'll walk through a simple Node.js server and offer up some selected Node.js resources.