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