nodejs会话存储

时间:2011-12-11 16:55:09

标签: node.js mongoose

在connect-mongodb模块中,我们可以在MongoDB中存储会话,如下所示:

var connect = require('connect')
, Db = require('mongodb').Db
, Server = require('mongodb').Server
, server_config = new Server('localhost', 27017, {auto_reconnect: true, native_parser: true})
, db = new Db('test', server_config, {})
, mongoStore = require('connect-mongodb');

connect.createServer(
  connect.bodyParser(),
  connect.cookieParser(),
  connect.session({
  cookie: {maxAge: 60000 * 20} // 20 minutes
  , secret: 'foo'
  , store: new mongoStore({db: db})
})
);

在上面的例子中,我们必须使用本机mongodb的东西。在我的nodejs项目中我使用mongoose 2.4.1,那么应该如何重写该代码以使用mongoose?

谢谢!

4 个答案:

答案 0 :(得分:1)

如果您使用的是mongoose且使用了mongoose.connect,则可以在

处获取连接
mongoose.connection

因此,要配置会话存储,您可以使用此表单

var mongoose = require('mongoose'),
    mongoStore = require('connect-mongodb');
...
mongoose.connect(host,databaseName,port);
// mongoose.connect('mongodb://host:port/databaseName');
...

connect.session({
    secret: 'your secret key',
    cookie: { maxAge : 60*15*1000}, // 15 minutes, in milliseconds
    store: new mongoStore( { db : mongoose.connection.db })
})

答案 1 :(得分:0)

你没有理由这样做,只需使用connect-mongodb的会话,它实现了所有'Session Store'Express功能。将Mongoose用于需要数据库存储的所有其他内容,但保留connect-mongodb的会话。

这是一个真实的例子:https://github.com/alexyoung/nodepad

答案 2 :(得分:0)

Mongoose应该以某种方式暴露连接。

答案 3 :(得分:0)

如果你使用connect-mongo,请传递你的mongoose连接:

var express = require('express');
var MongoStore = require('connect-mongo')(express);

new MongoStore({ mongoose_connection: mongoose.connection })

一切都会按照您的预期发挥作用。