NodeJS - 如何禁用特定路由的会话
NodeJS - How to disable the Session for a specific route
我想禁用特定路由的会话创建,如“/app/....”;
我尝试了一种方法,使用下面的代码:
pool = mysql.createPool(mysqlOptions);
var sessionConnection = mysql.createConnection(mysqlOptions);
var sessionStore = new MySQLStore(mysqlOptions, sessionConnection);
app.use(function(req, res, next){
if (!req.path.startsWith("/app/"))
session({
key: 'x',
secret: 'x',
store: sessionStore,
resave: false,
saveUninitialized: true,
cookie: {maxAge: moment().endOf('days').diff(moment())} })(req, res, next);
else
next();
});
我收到如下警告消息,几分钟后,服务器无法访问。
MaxListenersExceededWarning: Possible EventEmitter memory leak
detected. 11 disconnect listeners added to [MySQLStore]. Use
emitter.setMaxListeners() to increase limit
有人可以解释一下吗?提前致谢。
如果您将路由声明放在会话中间件之前,则不会为该特定路由处理程序创建会话。
app.use("/app", appRouter); // this will be handled before session is created
app.use(session(...));
如果您想按照您在代码中的方式动态调用会话,那么您应该创建一次会话中间件,然后动态调用它:
pool = mysql.createPool(mysqlOptions);
const sessionConnection = mysql.createConnection(mysqlOptions);
const sessionStore = new MySQLStore(mysqlOptions, sessionConnection);
const sessionMiddleware = session({
key: 'x',
secret: 'x',
store: sessionStore,
resave: false,
saveUninitialized: true,
cookie: {maxAge: moment().endOf('days').diff(moment())}
});
app.use(function(req, res, next){
if (!req.path.startsWith("/app/"))
sessionMiddleware(req, res, next);
else
next();
});
我想禁用特定路由的会话创建,如“/app/....”;
我尝试了一种方法,使用下面的代码:
pool = mysql.createPool(mysqlOptions);
var sessionConnection = mysql.createConnection(mysqlOptions);
var sessionStore = new MySQLStore(mysqlOptions, sessionConnection);
app.use(function(req, res, next){
if (!req.path.startsWith("/app/"))
session({
key: 'x',
secret: 'x',
store: sessionStore,
resave: false,
saveUninitialized: true,
cookie: {maxAge: moment().endOf('days').diff(moment())} })(req, res, next);
else
next();
});
我收到如下警告消息,几分钟后,服务器无法访问。
MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 disconnect listeners added to [MySQLStore]. Use emitter.setMaxListeners() to increase limit
有人可以解释一下吗?提前致谢。
如果您将路由声明放在会话中间件之前,则不会为该特定路由处理程序创建会话。
app.use("/app", appRouter); // this will be handled before session is created
app.use(session(...));
如果您想按照您在代码中的方式动态调用会话,那么您应该创建一次会话中间件,然后动态调用它:
pool = mysql.createPool(mysqlOptions);
const sessionConnection = mysql.createConnection(mysqlOptions);
const sessionStore = new MySQLStore(mysqlOptions, sessionConnection);
const sessionMiddleware = session({
key: 'x',
secret: 'x',
store: sessionStore,
resave: false,
saveUninitialized: true,
cookie: {maxAge: moment().endOf('days').diff(moment())}
});
app.use(function(req, res, next){
if (!req.path.startsWith("/app/"))
sessionMiddleware(req, res, next);
else
next();
});