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')。

我想我遗漏了一些非常明显的东西,但我很困惑。两个问题:

  1. 为什么将 session() 放在匿名函数中时执行不同?

  2. 这正常吗?我的 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)

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