Изменение сеанса express после выполнения res.render - PullRequest
0 голосов
/ 30 марта 2020

Я хочу сохранить информацию , сгенерированную пост-маршрутом в сеансе , передать ее в get-route (куда я перенаправляю после сообщение завершено), запустите res.render () с этой информацией из сеанса и , затем очистите ее, чтобы переменная сеанса была пуста для следующего маршрута (блок кода объясняет проблему а если бы это было слишком расплывчато). Помните, что приведенный ниже код является упрощенной версией, моя программа содержит рабочий сеанс, в котором я могу хранить переменные и получать к ним доступ.

const clearSessionMessage = async (req, res, next) => {
  await res.on('finish', () => {
    let sess = req.session;
    sess.message = '';
  });
  next();
};

app.use(clearSessionMessage);

app.get('/route', (req, res) => {
  let sess = req.session;
  res.render('template', { message: sess.message });
});

app.post('/post/route' (req, res) => {
  let sess = req.session;
  sess.message = 'The message I want to pass';  
  res.redirect('/route');
});

Возможные решения, которые я пробовал:

  • Измените параметр 'fini sh' в res.on() на: finish, end или close
  • Принудительно сохранить сеанс с помощью req.session.save(callback)

1 Ответ

0 голосов
/ 31 марта 2020

После некоторых исследований я смог решить свою проблему. Можно отредактировать сеанс после вызова res.render();, но если вы сделаете это sh, вы должны убедиться, что вы принудительно сохранили сеанс с помощью req.session.save(callback). Это связано с тем, что express автоматически сохраняет сеанс после res.render();, изменения после рендеринга не сохраняются автоматически!

app.get('/route', (req, res) => {
  res.render('template', { message: req.session.message });
  req.session.message = undefined;
  req.session.save(err => {
    if (err) {
      throw err;
    };
  });
});

app.post('/post/route' (req, res) => {
  req.session.message = 'The message I want to pass';  
  res.redirect('/route');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...