NodeJS — как отключить сеанс для определенного маршрута

Я хотел бы отключить создание сеанса для определенного маршрута, как /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: Обнаружена возможная утечка памяти EventEmitter. В [MySQLStore] добавлено 11 слушателей отключения. Используйте emitter.setMaxListeners() для увеличения лимита

Может ли кто-нибудь объяснить мне? Заранее спасибо.


person Slayes    schedule 28.11.2020    source источник


Ответы (1)


Если вы поместите объявление маршрута ПЕРЕД промежуточным программным обеспечением сеанса, сеанс не будет создан для этого конкретного обработчика маршрута.

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();
});
person jfriend00    schedule 28.11.2020
comment
Еще одна ошибка новичка для меня, большое спасибо за вашу помощь;) - person Slayes; 28.11.2020