我正在创建应用程序,使用nodejs(0.8.15),express(> 3.0)框架,socket.io和mongodb来注册用户。
每个人都知道,仅使用socket.io即可轻松创建简单的聊天,无需使用mongodb(或其他)。那么,在这种情况下,消息存储在哪里?在会议中?
第二个问题对我来说非常重要
我不明白:为什么 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-mongo
和 connect-mongodb
库有什么区别?
https://github.com/masylum/connect-mongodbhttps://github.com/kcbanner/connect-mongo
1)无处可去?服务器接收消息,广播它并忘记它。谁说一下存储的事?服务器可以只是一个代理。
2) 因为一旦用户离开站点,会话就不必被销毁。例如,考虑一家商店。您去一家商店,将一些东西放入购物篮,然后关闭浏览器。 3 天后,您返回时仍会看到购物篮中的商品。这只能通过存储在数据库中的会话来完成(至少以可靠的方式)。
这实际上取决于您的需求。就我而言,我几乎从不使用基于数据库的会话。我使用内存存储,例如 Redis。
3)谁知道呢?可能有一些细微的差别,我看不出任何明显的差异。
4)不,正如我所说:这取决于您的需求。如果您希望会话仅在用户实际查看页面时才处于活动状态,那么您可以坚持使用任何内存存储。或者您可能根本不需要会话,在这种情况下您根本不必使用它。
1)如果您不想使用数据库进行聊天,则应该将消息存储到一个简单的哈希中。但请记住,如果您重新启动节点应用程序,它们将会丢失。
2) MongoStore(或 RedisStore)允许您将 Express 会话存储到 MongoDB/Redis 中,而不是使用 MemoryStore,MemoryStore 不是为生产环境设计的。
(顺便说一句,您找到的代码适用于 Express 2.x)
3)两者看起来很相似。我个人使用 connect-mongo。
4) 不。Express 为您处理会话 cookie,而 Socket.IO 则处理套接字。如果你想使用 MongoDB,你应该尝试 Mongoose http://mongoosejs.com/