Подтвердить что ты не робот

Express.js: app.locals vs req.locals vs req.session

Я пытаюсь понять, когда лучше использовать каждое из следующих. Вот мое рудиментарное понимание:

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

res.locals - полезно для хранения переменных для конкретного цикла запроса/ответа. переменные доступны только для представления, связанного с ответом.

req.session - полезно для хранения переменных, связанных с уникальным сеансом пользователя (например, имя пользователя). эти переменные должны быть доступны для всех представлений для уникального пользователя/сеанса.

Конкретный вариант использования, который у меня есть, следующий: пользователь запускает запрос, который извлекает данные из mongodb. Теперь я хочу получить результат этого запроса, который представляет собой массив json, доступный как переменная для ВСЕХ представлений (http-запросов). Каков наилучший способ "сохранить" массив результатов, чтобы каждое представление могло получить к нему доступ?

Спасибо

4b9b3361

Ответ 1

Теперь я хочу получить результат этого запроса, который представляет собой массив json, доступный в качестве переменных для ВСЕХ видов. Что за лучший способ "сохранить" массив результатов, чтобы каждое представление могло получить к нему доступ?

Когда вы говорите "доступно для ВСЕХ представлений", я предполагаю, что вы имеете в виду все HTTP-запросы. Если это так, то вам нужно знать, что HTTP - это протокол без учета состояния и не предусматривает этого. Для этого вам нужно разработать свой собственный механизм.

Один из способов сделать это - кешировать эту информацию (массив) на сервере и извлекать ее по каждому запросу (например, извлекать ее из памяти, а не из MongoDB). Вы храните идентификатор сеанса в файле cookie и на основе этого идентификатора извлекаете его из кеша, когда идут другие запросы. Доступно несколько инструментов кэширования (например, redis, memcached и т.д.), Которые вы можете сохранить для хранения информации в памяти.

Вы также можете использовать эту информацию (сам массив), и в этом случае она будет посылаться туда и обратно между клиентом и сервером по каждому HTTP-запросу и, скорее всего, не будет очень хорошей идеей, если данные не очень маленький.