#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. Еще одна ошибка новичка для меня, спасибо большое за вашу помощь 😉