Building a Javascript web app, or sipping the node.js koolaid
Series: worklog November 03, 2010
I’ve been toying around with the idea of building a small web application with a completely Javascript stack, from top-to-bottom. After perusing GitHub for a bit, I found that it is actually doable.
For the purpose of this post, I’ll consider a basic stack to consist of: a server, a web framework, a backend server and a templating engine. And I’ll also use Javascript on the front-end.
Here’s the rundown of what I’ll be using for my current side-project and how to get it installed.
#Server: node.js
node.js is an evented I/O server that uses Google’s V8 
Javascript engine.  All the cool kids are doing it.
To install node.js in Linux: 
Download the tarball and extract it 
Then in your favorite terminal:
cd node
./configure You may get some warnings about missing SSL components, if so do:  
apt-get install openssl libssl-dev pkg-config    and then try again.  You can install `node.js` without SSL but you will run  into problems with `socket.io` later.  After you get the green-light from configure, run these:
make
make install
make test
Check that it worked with node --version.
#npm
npm is a package manager for node libraries.
Think of it like PyPi or Rubygems.
To install npm: 
In your favorite terminal:
curl http://npmjs.org/install.sh | sh
See the README if 
you get permission errors, or just bust out sudo if you like living 
dangerously.
Now we can install all the other libraries with npm instead of grabbing 
tarballs or cloning repos.
#Framework: express.js
express.js is Sinatra-inspired web framework 
for node.  It’s billed as “insanely fast, insanely sexy” so what’s 
not to like!
Install it with npm:
npm install express
You can run express in a directory to setup a skeleton project structure.
#Templates: jade
jade is a templating engine for node that is 
similar to Haml. I am still looking for something closer to jinja2 but 
jade will do for now.
Install it with npm:
npm install jade   
npm install less
#Backend: mongoose + MongoDB
mongoose is a MongoDB ORM 
specifically design for the asynchronous callback model used in node. 
MongoDB can also speak Javascript on its own plus everything is JSON-like.
Follow the instructions here 
if you don’t have MongoDB installed.  Or maybe you can use apt-get install mongodb 
if you are lazy like me.
Then install mongoose with npm:
npm install mongoose   
#Front-end goodies:
##jquery
Hopefully, no explanation necessary; drop this into your HTML and be on your way:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
##Socket.IO
Socket.IO provides an interface for pushing real-time 
updates using WebSockets + browser fallbacks (for those poor non-Chrome users).
It plays nicely with express.
Install it with npm:
npm install socket.io
Check out the docs for instructions on how to setup the client-side stuff.
##Raphaël.js
Raphaël.js is a small SVG drawing and animation library
that makes it simple to make pretty things happen in the browser.
You can play around with it here: http://raphaeljs.com/playground.html
I was able to get everything working together (albeit every piece is doing very basic stuff) so my ‘proof-of-concept’ is complete and I can start working on the actual app now.
I’ve dubbed this new stack MUNJE (pronounced like munge) for 
Mongo-Unix-Node-Jade-Express…and because no one will be able to decipher my 
ugly Javascript code ;-)
