Переменные Nodejs, которые сохраняются в течение экспресс-сеанса - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть некоторая информация, уникальная для каждого пользователя, эта информация не часто меняется, поэтому я настроил cronjob, используя node-cron для обновления значения один раз в день.

Мой вопрос: где можноЯ сохраняю это значение?

Я пытался app.locals, но из того, что я вижу, он действует как глобальная переменная для всего приложения, то есть все пользователи имеют одинаковое значение в этой переменной.

Я также попытался использовать res.locals, который отлично работает, но только для первой загрузки страницы, где он и устанавливается.После этого, когда я перезагружаю страницу, переменная не определена, потому что она устанавливается только один раз.

Способ, которым я делаю это: в моем коде есть промежуточное ПО, которое проверяет, был ли запланирован cronjob.Если нет, то он планирует cronjob, а также запускает код один раз, чтобы получить значение, а затем устанавливает его в res.locals, поэтому он работает при первой загрузке.Когда я перезагружаюсь, это промежуточное ПО может видеть, что переменная уже была установлена ​​ранее, поэтому оно переходит прямо к следующему промежуточному ПО или маршруту, используя функцию next().

Способ, которым я проверяю, установлен ли в данный момент cronjob,также неправильно из-за той же проблемы.Прямо сейчас у меня есть глобальная переменная cronSchedule, которая является логическим значением.Проблема в том, что это переменная области приложения, поэтому, когда первый пользователь загружает страницу, для переменной устанавливается значение true, чтобы cronjob не выполнялся для других пользователей.

Мое промежуточное ПО

app.use( function( req, res, next ) {
  if (!cronScheduled) {
    // schedule tasks to be run on the server   
    cron.schedule('0 0 * * *', function() {
      functionToGetData();
    });
    functionToGetData();
  } else {
    next();
  }
} );

1 Ответ

0 голосов
/ 12 февраля 2019

Мне только что удалось это выяснить!

Используя req.session Мне удалось это сделать.

Вот мое обновленное промежуточное ПО:

app.use( function( req, res, next ) {
  if ( req.user !== undefined && !req.session.cronIsScheduled) {
    // schedule tasks to be run on the server   
    cron.schedule('0 0 * * *', function() {
      functionToGetData();
    });

    functionToGetData();
  } else {
    next();
  }
} );

И ядобавлен дополнительный фрагмент кода, который добавляет это значение из сеанса к res.locals

app.use( function( req, res, next ) {
  res.locals = {
    user: req.user !== undefined ? req.user : undefined,
    academic_periods_student: req.session.academic_periods_student
  };
  next();
});

Теперь эта переменная уникальна для каждого пользователя и не сбрасывается при каждой загрузке страницы.Он также сбрасывается, когда пользователь выходит из системы и возвращается, в моем случае это бонус!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...