2

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

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

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

我不明白:为什么 MongoStore 在那里举行会议?我读到它是“用于连接会话中间件/连接的会话存储”。据我所知,当用户离开站点时会话会破坏。那么人们为什么要存储和使用它呢 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
    }));
});

我刚刚找到的代码。似乎是针对 express 2.x

connect-mongo3)和connect-mongodb库 有什么区别?https://github.com/masylum/connect-mongodb

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

4) 我必须为 cookie 和套接字制作 MongoStore 吗?

谢谢你!

4

2 回答 2

6

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

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

这真的取决于你的需求。就我而言,我几乎从不使用基于数据库的会话。我使用像Redis这样的内存存储。

3)谁知道?可能有一些细微的差别,我看不出有什么明显的。

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

于 2012-11-28T22:43:14.337 回答
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/

于 2012-11-28T22:46:49.567 回答