目前,我在 index.js
顶部要求并定义 express-session
选项,如下所示:
const session = require(`express-session`)({
secret: `MyEpicSecret`,
resave: true,
saveUninitialized: true,
cookie: {maxAge: 1000 * 60} // 1 minute: for testing
}),
我将它与我的 Express 应用程序一起使用:
app.use(session);
此布局很重要,因为我稍后将 session
传递到 index.js
底部的 socket.io 模块:
require(`./modules/socket.js`)(server, session);
通过上述设计流程,我的应用程序可以正常运行,并且 session 可以完美地处理和管理。我现在的目标是实现 connect-mongo 将 session 保存到 MongoDB。他们的documentation有点模糊,但据我所知,我需要首先需要 express-session
模块,然后在 app.use( )
。这是一个问题 - 如果我在 app.use()
中定义选项,当我需要 socket.js
时,我将不再能够传递配置的 session (它的选项)模块。
我想要做的事情是这样的:
const session = require('express-session')({
secret: `MyEpicSecret`,
resave: true,
saveUninitialized: true,
cookie: {maxAge: 1000 * 60}, // 1 minute: for testing
store: new MongoStore(options)
});
const MongoStore = require('connect-mongo')(session);
app.use(session);
这是不可能的 - MongoStore
在我尝试使用它时尚未定义。如果我将 MongoStore 向上移动,当我需要 MongoStore 时,session
将是未定义的。
我仍在学习 Express 的诀窍,非常感谢任何人能够提供的帮助:)
最佳答案
您仍然可以将 session({...})
调用的结果分配给变量并将其传递。
const expressSession = require('express-session');
const MongoStore = require('connect-mongo')(expressSession);
const session = expressSession({
secret: `MyEpicSecret`,
resave: true,
saveUninitialized: true,
cookie: {maxAge: 1000 * 60}, // 1 minute: for testing
store: new MongoStore(options)
});
app.use(session);
...
require(`./modules/socket.js`)(server, session);
关于javascript - Express:实现 MongoDB session 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59854761/