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

#node.js #session #disable

#node.js #сеанс #отключить

Вопрос:

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

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

Ответ №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();
});
 

Комментарии:

1. Еще одна ошибка новичка для меня, спасибо большое за вашу помощь 😉