Getting-started: Setup Database for Node.js

I am new to node.js but am excited to try it out. I am using Express as a web framework, and Jade as a template engine. Both were easy to get setup following this tutorial from Node Camp.

However the one problem I am finding is I can't find a simple tutorial for getting a DB set up. I am trying to build a basic chat application (store session and message).

Does anyone know of a good tutorial?

This other SO post talks about dbs to use- but as this is very different from the Django/MySQL world I've been in, I want to make sure I understand what is going on.

Thanks!


I assume you have npm installed the correct way using one of these snippets(I used the top one).

Redis

I would use redis as a database. For one it is really fast, persistent. You need to install it, but that is really easy.

make

Redis-cli

Next you should play with redis yourself. I would advice you to look at this excellent tutorial by Simon Willison. He and I also advice you to just play with the redis-cli to get a feeling of the database.

Redis client

Finally you need to install a redis client. I would advise you to use mranney's node_redis because I think it is the fastest and most actively developed client.

Installation

npm install hiredis redis

Simple example, included as example.js:

var redis = require("redis"),
    client = redis.createClient();

client.on("error", function (err) {
    console.log("Error " + err);
});

client.set("string key", "string val", redis.print);
client.hset("hash key", "hashtest 1", "some value", redis.print);
client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
client.hkeys("hash key", function (err, replies) {
    console.log(replies.length + " replies:");
    replies.forEach(function (reply, i) {
        console.log("    " + i + ": " + reply);
    });
    client.quit();
});

Storing sessions in database

Also the author of express has created a library to handle your sessions using redis.

Installation:

npm install connect-redis

Example:

var connect = require('connect')
      , RedisStore = require('connect-redis');

connect.createServer(
  connect.cookieDecoder(),
  // 5 minutes
  connect.session({ store: new RedisStore({ maxAge: 300000 }) })
);

Storing messages in database

I think I would use a sorted set for this. Store the messages using ZADD and retrieve them using ZRANK, ZRANGEBYSCORE.

Socket.io

Finally if you are trying to create a simple chat I would advise you to have a look at socket.io.

socket.io aims to make realtime apps possible in every browser and mobile device, blurring the differences between the different transport mechanisms.

I also created a chat using socket.io which I posted on stackoverflow. Adding persistence + authentication should be a breeze.


Express authentication using Redis for session store and Couchdb for database using coffeescript..

Check this gist: https://gist.github.com/652819

I use this template for most of my projects. You can implement a similar mongodb version of it too using:

node-mongodb-native by christkv : https://github.com/christkv/node-mongodb-native, or

mongoose : https://github.com/learnboost/mongoose, or

amark's mongous: https://github.com/amark/mongous