Node.js and Windows Azure: Creating a blog application using Node.JS and Windows Azure Table & Blob Storage Part 1

In this example I will create a node.js based blob application which will storage all the blog articles on Azure Storage. When application starts it reads blog article from Windows Azure table storage and then render it using EJS viewer. This sample is part of Azure Node SDK however I am going to enhance it to make it look like a full scale blog application. This is just a start. I will write this blog assume you are a new to node programming. This application uses following node packages:

  • Express
  • EJS
  • Jade
  • Stylus
  • Azure
  • Node-uuid

Let’s start with downloading package one by one:

Express:

C:\Azure\nodeprojects\BlogUsingAzureStorage>npm install express

npm http GET https://registry.npmjs.org/express

npm http 200 https://registry.npmjs.org/express

npm http GET https://registry.npmjs.org/mime

npm http GET https://registry.npmjs.org/qs

npm http GET https://registry.npmjs.org/mkdirp/0.0.7

npm http GET https://registry.npmjs.org/connect

npm http 304 https://registry.npmjs.org/qs

npm http 304 https://registry.npmjs.org/mkdirp/0.0.7

npm http 304 https://registry.npmjs.org/connect

npm http 200 https://registry.npmjs.org/mime

npm http GET https://registry.npmjs.org/formidable

npm http 304 https://registry.npmjs.org/formidable

express@2.5.6 ./node_modules/express

├── mime@1.2.4

├── qs@0.4.0

├── mkdirp@0.0.7

└── connect@1.8.5

 

EJS:

C:\Azure\nodeprojects\BlogUsingAzureStorage>npm install ejs

npm http GET https://registry.npmjs.org/ejs

npm http 304 https://registry.npmjs.org/ejs

ejs@0.6.1 ./node_modules/ejs

 

 

Jade:

C:\Azure\nodeprojects\BlogUsingAzureStorage>npm install jade

npm http GET https://registry.npmjs.org/jade

npm http 200 https://registry.npmjs.org/jade

npm http GET https://registry.npmjs.org/mkdirp

npm http GET https://registry.npmjs.org/commander

npm http 304 https://registry.npmjs.org/mkdirp

npm http 304 https://registry.npmjs.org/commander

jade@0.20.0 ./node_modules/jade

├── commander@0.2.1

└── mkdirp@0.3.0

 

 

Stylus:

C:\Azure\nodeprojects\BlogUsingAzureStorage>npm install stylus

npm http GET https://registry.npmjs.org/stylus

npm http 304 https://registry.npmjs.org/stylus

npm http GET https://registry.npmjs.org/mkdirp/0.0.7

npm http GET https://registry.npmjs.org/growl/1.1.0

npm http GET https://registry.npmjs.org/cssom/0.2.1

npm http 304 https://registry.npmjs.org/mkdirp/0.0.7

npm http 304 https://registry.npmjs.org/growl/1.1.0

npm http 304 https://registry.npmjs.org/cssom/0.2.1

stylus@0.22.6 ./node_modules/stylus

├── growl@1.1.0

├── mkdirp@0.0.7

└── cssom@0.2.1

Azure:

C:\Azure\nodeprojects\BlogUsingAzureStorage>npm install azure

npm http GET https://registry.npmjs.org/azure

npm http 304 https://registry.npmjs.org/azure

npm http GET https://registry.npmjs.org/qs

npm http GET https://registry.npmjs.org/mime

npm http GET https://registry.npmjs.org/sax

npm http GET https://registry.npmjs.org/xmlbuilder

npm http GET https://registry.npmjs.org/xml2js

npm http GET https://registry.npmjs.org/log

npm http 304 https://registry.npmjs.org/qs

npm http 304 https://registry.npmjs.org/mime

npm http 304 https://registry.npmjs.org/sax

npm http 304 https://registry.npmjs.org/xmlbuilder

npm http 304 https://registry.npmjs.org/xml2js

npm http 304 https://registry.npmjs.org/log

azure@0.5.1 ./node_modules/azure

├── xmlbuilder@0.3.1

├── mime@1.2.4

├── log@1.2.0

├── qs@0.4.0

├── xml2js@0.1.13

└── sax@0.3.5

 

Node-uuid:

C:\Azure\nodeprojects\BlogUsingAzureStorage>npm install node-uuid

npm http GET https://registry.npmjs.org/node-uuid

npm http 200 https://registry.npmjs.org/node-uuid

npm WARN node-uuid@1.3.3 dependencies field should be hash of <name>:<version-range> pairs

node-uuid@1.3.3 ./node_modules/node-uuid

 

Now if you will look your application node_modules folder you will all the packages are download as below:

C:\Azure\nodeprojects\BlogUsingAzureStorage>dir node_modules

 Volume in drive C has no label.

 Volume Serial Number is 8464-7B7C

 

 Directory of C:\Azure\nodeprojects\BlogUsingAzureStorage\node_modules

 

01/25/2012  11:00 PM    <DIR>          .

01/25/2012  11:00 PM    <DIR>          ..

01/25/2012  10:59 PM    <DIR>          .bin

01/25/2012  11:00 PM    <DIR>          azure

01/25/2012  10:58 PM    <DIR>          ejs

01/25/2012  10:57 PM    <DIR>          express

01/25/2012  10:59 PM    <DIR>          jade

01/25/2012  11:00 PM    <DIR>          node-uuid

01/25/2012  10:59 PM    <DIR>          stylus

 

Now please clone nodeblogwithazurestorage.git repo from GitHub as below:

 

C:\Azure\nodeprojects\BlogUsingAzureStorage>git clone https://Avkash@github.com/Avkash/nodeblogwithazurestorage.git

 

Cloning into 'nodeblogwithazurestorage'...

remote: Counting objects: 16, done.

remote: Compressing objects: 100% (14/14), done.

remote: Total 16 (delta 0), reused 16 (delta 0)

Unpacking objects: 100% (16/16), done.

 

You will see a new folder name “'nodeblogwithazurestorage'” which includes all the files from repo. Please copy all of these files to your root folder so your work folder will look like as below:

 

C:\Azure\nodeprojects\BlogUsingAzureStorage>dir

01/25/2012  11:25 PM             2,828 blog.js

01/25/2012  11:25 PM    <DIR>          nodeblogwithazurestorage

01/25/2012  11:00 PM    <DIR>          node_modules

01/25/2012  11:25 PM               161 package.json

01/25/2012  11:29 PM    <DIR>          public

01/25/2012  11:29 PM    <DIR>          routes

01/25/2012  11:25 PM             2,073 server.js

01/25/2012  11:29 PM    <DIR>          views

 

That’s it. Let’s run it.

C:\Azure\nodeprojects\BlogUsingAzureStorage>node server.js

Express server listening on port 40506 in development mode

 

Now open your browser using https://localhost:40506 or https://127.0.0.1:4506 and you will see the node blog application is running as below:

 

In next blog:

  • We will use Windows Azure Table Storage to store and retrieve Blog articles.
  • Change package.json for correct dependencies
  • Updating package
  • We will deploy this application to Windows Azure