nodejs sessionStore 与 cloudant app.use 执行不一致
nodejs sessionStore with cloudant app.use inconsistent execution
我正在为 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()}
}));
在第一个示例中,调用了创建和存储新会话 ID 的 sessionStore 例程
示例 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') 是否应该设置为处理这种情况?
在你的第二个例子中,你的匿名函数调用 'session' 但没有 return 它。
Express session是中间件,所以第一种用法是正确的。
您可能还对 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});
});
@Glynn:谢谢,你给出了部分解决方案。我回到了您回复中的原始方法,但发现页面响应仍然存在问题。服务器一直挂着。在构建 cloudant 会话管理器时,所需例程之一是 sessionStore.save,我错误地将其指定为:
sessionStore.save(sid, session, callback)
原来express-session调用sessionStore.save()时,使用的是:
sessionStore.save(callback)
修复解决了所有问题。谢谢你的帮助。
我正在为 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()}
}));
在第一个示例中,调用了创建和存储新会话 ID 的 sessionStore 例程
示例 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') 是否应该设置为处理这种情况?
在你的第二个例子中,你的匿名函数调用 'session' 但没有 return 它。
Express session是中间件,所以第一种用法是正确的。
您可能还对 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});
});
@Glynn:谢谢,你给出了部分解决方案。我回到了您回复中的原始方法,但发现页面响应仍然存在问题。服务器一直挂着。在构建 cloudant 会话管理器时,所需例程之一是 sessionStore.save,我错误地将其指定为:
sessionStore.save(sid, session, callback)
原来express-session调用sessionStore.save()时,使用的是:
sessionStore.save(callback)
修复解决了所有问题。谢谢你的帮助。