我正在为nodeJS构建一个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例程来创建和存储新的会话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')。
我想我错过了一些非常明显的东西,但我很难过。两个问题:
当放置在匿名函数中时,为什么session()执行会有所不同?
这是正常的,我的sessionStore.on('connect')是否应设置为处理这种情况?
答案 0 :(得分:1)
在第二个示例中,您的匿名函数调用'session'但不返回。
Express会话是中间件,所以第一次使用是正确的。
您可能还对Cloudant的预建会话商店感兴趣: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});
});
答案 1 :(得分:0)
@Glynn:谢谢,你提供了部分解决方案。我回复了您的回复中的原始方法,但发现我仍然遇到页面响应问题。服务器一直挂着。在构建cloudant会话管理器时,其中一个必需的例程是sessionStore.save,我错误地将其指定为:
sessionStore.save(sid, session, callback)
事实证明,当express-session调用sessionStore.save()时,它使用:
sessionStore.save(callback)
修复解决了所有问题。谢谢你的帮助。