nodejs:会话存储在哪里?什么是connect-mongo?

时间:2012-11-28 22:30:51

标签: node.js mongodb express socket.io connect

我创建应用程序,使用nodejs(0.8.15),express(> 3.0)框架,socket.io和mongodb作为注册用户。

1)每个人都知道只使用socket.io创建简单的聊天很容易,没有mongodb(或其他)。那么,在这种情况下存储消息?在会议中?

2)对于我来说,第二个问题非常重要

我不明白:为什么MongoStore会在那里进行会话?我读到它是“SessionStorage for connect的会话中间件/ Connect”。据我所知,当用户离开网站时,会话会被破坏。那么人们为什么要存储它并使用require('connect-mongo') ??

var config = require('../config'),
    express = require('express'),
    MongoStore = require('connect-mongo'),
    server = express.createServer();

server.configure(function() {
    server.use(express.logger());
    server.use(express.methodOverride());
    server.use(express.static(config.staticPath));
    server.use(express.bodyParser());
    server.use(express.cookieParser());
    server.use(express.session({
        store: new MongoStore({
            db: config.db
        }),
        secret: config.salt
    }));
});
我刚刚找到的代码。它似乎是快递2.x

3)connect-mongoconnect-mongodb库之间有什么区别? https://github.com/masylum/connect-mongodb

https://github.com/kcbanner/connect-mongo

4)我是否必须为cookies和套接字制作MongoStore?

谢谢你!

2 个答案:

答案 0 :(得分:6)

1)无处?服务器接收消息,广播它并忘记它。谁有关于存储的问题?服务器可以只是一个代理。

2)因为一旦用户离开网站,就不必销毁会话。例如,考虑一个商店。你去商店,把一些东西放在你的篮子里,然后关闭浏览器。 3天后你回去,你仍然可以在篮子里看到你的物品。这只能通过存储在DB中的会话来完成(至少以可靠的方式)。

这实际上取决于您的需求。就我而言,我几乎没有使用基于数据库的会话。我使用内存存储,如Redis

3)谁知道?可能会有一些微妙的差异,我看不出任何明显的差异。

4)不。正如我所说:这取决于你的需求。如果您希望仅在用户实际查看页面时才激活会话,那么您可以坚持使用任何内存存储。或者你可能根本不需要会话,在这种情况下你根本不必使用它。

答案 1 :(得分:3)

1)如果您不想为聊天使用数据库,则应将消息存储为简​​单的哈希。但请记住,如果重新启动节点应用程序,它们将会丢失。

2)MongoStore(或RedisStore)允许您将Express会话存储到MongoDB / Redis中,而不是使用不是为生产环境设计的MemoryStore。

(顺便说一句,你找到的代码是Express 2.x)

3)两者看起来相似。我个人使用connect-mongo。

4)否.Express处理会话cookie,Socket.IO处理套接字。如果您想使用MongoDB,您应该尝试Mongoose http://mongoosejs.com/