Начало работы: установка базы данных для Node.js


82

Я новичок в node.js, но очень рад попробовать. Я использую Express в качестве веб-фреймворка и Jade в качестве механизма шаблонов. Оба были легко настроены после этого руководства от Node Camp .

Однако я обнаружил одну проблему: я не могу найти простого руководства по настройке БД . Я пытаюсь создать базовое приложение чата (сеанс хранения и сообщение).

Кто-нибудь знает хороший учебник?

В этом другом сообщении SO говорится об использовании dbs, но поскольку это сильно отличается от мира Django / MySQL, в котором я был, я хочу убедиться, что понимаю, что происходит.

Благодаря!


Ненавижу говорить это, но я думаю, что фреймворк - плохой учитель языка программирования.
grantwparks

Ответы:


89

Я предполагаю, что вы правильно установили npm, используя один из этих фрагментов (я использовал верхний).

Redis

Я бы использовал redis в качестве базы данных. Во-первых, это действительно быстро , настойчиво. Вам необходимо установить его, но это действительно просто.

make

Redis-cli

Затем вы должны сами поиграть с Redis. Я бы посоветовал вам взглянуть на этот отличный учебник Саймона Уиллисона . Мы с ним также советуем вам просто поиграть сredis-cli базой данных.

Клиент Redis

Наконец, вам нужно установить клиент Redis. Я бы посоветовал вам использовать node_redis от mranney, потому что я думаю, что это самый быстрый и наиболее активно разрабатываемый клиент.

Установка

npm install hiredis redis

Простой пример, включенный как 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();
});

Хранение сессий в базе данных

Также автор express создал библиотеку для обработки ваших сессий с использованием redis.

Установка:

npm install connect-redis

Пример:

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

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

Хранение сообщений в базе данных

Думаю, я бы использовал для этого отсортированный набор . Храните сообщения , используя ZADDи извлекать их с помощью ZRANK, ZRANGEBYSCORE.

Socket.io

Наконец, если вы пытаетесь создать простой чат, я бы посоветовал вам взглянуть на socket.io.

socket.io стремится сделать приложения в реальном времени возможными в каждом браузере и мобильном устройстве, стирая различия между различными транспортными механизмами.

Я также создал чат с помощью socket.io, который я разместил в stackoverflow . Добавление постоянства + аутентификации должно быть легким делом.


4

Экспресс-аутентификация с использованием Redis для хранилища сеансов и Couchdb для базы данных с использованием coffeescript ..

Проверьте эту суть: https://gist.github.com/652819

Я использую этот шаблон для большинства своих проектов. Вы также можете реализовать аналогичную версию mongodb, используя:

node-mongodb-native от christkv: https://github.com/christkv/node-mongodb-native или

мангуст: https://github.com/learnboost/mongoose или

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



2

Я знаю, что это старый пост, но на тот случай, если кто-то еще наткнется на него, я создал учебник, используя большинство компонентов OP, особенно подключение к базе данных. Использование Backbone.js добавляет сложности, но все это очень весело!

http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time-chat-app/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.