nodejs sessionStore与cloudant app.use不一致的执行

我正在为nodeJS构build一个cloudant sessionStore,并被app.use语句发生了什么。 下面的两个app.use语句只是在一个被调用的会话中封装了一个函数,但是这会导致非常不同的行为。

例1:

app.use('/login*', session( { store: sessionStore, secret: sessionSecret, resave: false, saveUninitialized: true, cookie: {secure: true, maxAge:24*60*60*1000}, genid: function (req) {return uuid.v4()} })); 

在第一个例子中,sessionStore例程被调用,它创build和存储一个新的会话ID

例2:

 app.use('/login*', function () {session( { store: sessionStore, secret: sessionSecret, resave: false, saveUninitialized: true, cookie: {secure: true, maxAge:24*60*60*1000}, genid: function (req) {return uuid.v4()} })}); 

在示例2中,将会话语句包装在一个函数def中只会调用sessionStore.on('disconnect'),然后调用sessionStore.on('connect')。

我想我错过了一些非常明显的东西,但是很难过。 两个问题:

  1. 为什么当放置在一个匿名函数内时session()的执行是不同的?

  2. 这是正常的,应该设置我的sessionStore.on('连接')来处理这种情况?

在你的第二个例子中,你的匿名函数调用“会话”,但不返回它。

Express会话是中间件,所以第一个用法是正确的。

您也可能对Cloudant的预build会话存储感兴趣: https ://www.npmjs.com/package/connect-cloudant

这将使你的代码:

. . . var app = express(); app.use(session({ store: cloudantStore, secret: 'your secret', cookie: {maxAge:24*60*60*1000} })); app.get('login', function(req, res) { console.log('my session is', req.session); res.send({ok: true}); });

@Glynn:谢谢,你给了部分解决scheme。 在回复中,我回到原来的方式,但发现我仍然在页面响应中遇到问题。 服务器不停地挂着。 在构buildcloudant会话pipe理器时,其中一个必需的例程是sessionStore.save,我错误地将其指定为:

 sessionStore.save(sid, session, callback) 

事实certificate,当express-session调用sessionStore.save()时,它使用:

 sessionStore.save(callback) 

解决所有问题。 谢谢你的帮助。