Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express:实现MongoDB会话存储_Javascript_Node.js_Mongodb_Express_Session - Fatal编程技术网

Javascript Express:实现MongoDB会话存储

Javascript Express:实现MongoDB会话存储,javascript,node.js,mongodb,express,session,Javascript,Node.js,Mongodb,Express,Session,目前,我需要并定义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.

目前,我需要并定义
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);
此布局很重要,因为我稍后会将
会话
传递到
index.js
底部的socket.io模块:

require(`./modules/socket.js`)(server, session);

通过上述设计流程,我的应用程序可以正常运行,会话的处理和管理完美无瑕。我现在的目标是实现
connectmongo
,将会话保存到MongoDB。它们有点模糊,但据我所知,我需要先使用
express session
模块,然后在
app.use()中定义稍后要使用的选项。这是一个问题-如果我在
app.use()
中定义了选项,当我需要我的
socket.js
模块时,我将无法再通过配置的会话(它的选项)

我想做的事情是:

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时,
会话
将是未定义的

我仍在学习express的诀窍,非常感谢任何人能够提供的帮助:)

试试这个:

 const session = require('express-session');
 const MongoStore = require('connect-mongo')(session);

 app.use(session({
    secret: `MyEpicSecret`,
    resave: true,
    saveUninitialized: true,
    cookie: {maxAge: 1000 * 60} // 1 minute: for testing
    store: new MongoStore(options)
 }));
试试这个:

 const session = require('express-session');
 const MongoStore = require('connect-mongo')(session);

 app.use(session({
    secret: `MyEpicSecret`,
    resave: true,
    saveUninitialized: true,
    cookie: {maxAge: 1000 * 60} // 1 minute: for testing
    store: new MongoStore(options)
 }));

您仍然可以将
会话({…})
调用的结果分配给变量并传递

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);

您仍然可以将
会话({…})
调用的结果分配给变量并传递

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);

如原问题所述,当我在
index.js
底部需要时,使用此方法我不会将
会话
的选项对象传递给我的
socket.js
模块,这就是为什么我需要模块时必须定义选项的原因。如原问题所述,通过使用此方法,当我在
index.js
底部需要时,我不会将
会话
的选项对象传递给我的
socket.js
模块-这就是为什么我需要模块时必须定义选项的原因。我对如何需要和使用这些特定模块的理解有点模糊。这对我帮助很大。非常感谢您的帮助:)。我对如何要求和使用这些特定模块的理解有点模糊。这对我帮助很大。非常感谢您的帮助:)。