Node.js is an open source runtime environment for server-side and network based applications.  Node.js contains all the components needed to build a functioning website.  But, you need to think of Node.js as a big tool box.  As with any other art form, going to the tool box over and over to perform the same task is not productive.  The concept of tool reuse is used in all forms of artistry and development is no exception.

What is a Web Framework

In general, frameworks are code libraries that are created to save people a lot of time and unnecessary work for repetitive tasks.  A framework is a universal environment that has several key features that distinguish it from a regular library:

  • Inversion of control - The control flow of the application is dictated by the framework, not the code using the framework.
  • Default behavior - Provide a default set of behaviors yielding a consistent outcomes.
  • Extensibility - Provides a layer of extensibility where the user can selectively override the default behaviors of the framework.
  • A non-modifiable framework - The core framework software is not intended to be modified.

Frameworks can allow you to create a server in just a few lines of code and make creating a REST API very simple.

KoaTreeKoa

Koa is a web framework that is being worked on by the team that wrote the Express Node.js framework.  Koa differentiates itself by not using any middleware within the core of the framework.  From Koa's website

Koa is a new web framework designed by the team behind Express, which aims to be a smaller, more expressive, and more robust foundation for web applications and APIs. Through leveraging generators Koa allows you to ditch callbacks and greatly increase error-handling. Koa does not bundle any middleware within core, and provides an elegant suite of methods that make writing servers fast and enjoyable.

When building an application on top of Koa, you are creating generator functions that are composed and executed upon request.  Koa is similar to other middleware systems like Rack for Ruby.

Koa Hello World

It can't finish up talking about a framework without presenting the obligatory "Hello World" example.  So, here it is in Koa:

var koa = require('koa');
var application = koa();

application.use(function *() {
  this.body = "Hello world!!!"
});

var server = application.listen(8080, function() {
  console.log("Koa is listening on http://localhost:8080");
});

Summary

Koa is a fairly small set of code so it does not cause unnecessary bloat to your application.  It is basically a bare-boned framework where the developer can decide on the middleware they want to run instead of relying on that of the framework.  The current state of Koa right now is that it's pretty early on in development so if you decide to investigate it, I'd avoid being bleeding edge and stick with the latest stable release.

Other Popular frameworks

The benefit of the open source community is that there are always alternatives to choose from.  Here is a list of some of the more popular Node.js frameworks out there: