Являются ли переменные, хранящиеся в глобальном пространстве имен Node.JS Express, приватными для текущего запроса? - PullRequest
0 голосов
/ 25 февраля 2019

Node.JS Express приложения имеют глобальный объект, который действует как «мешок», к которому можно прикрепить данные / объекты, доступные для всего кода в вашем приложении:

// Create an appRoot global variable that tells the code base what the root directory of this app is.
global.appRoot = path.resolve(__dirname);

Моя главная проблема заключается в том, что я должен быть уверен, что глобальный объект 1007 * является только глобальным в том смысле, что весь код, который работает в контексте текущего запроса клиента другогоимеет доступ к данным в этом объекте и что данные недоступны между или по запросам.В противном случае я мог бы передавать данные, которые должны оставаться конфиденциальными для определенного запроса или пользователя.

Чтобы убедиться, что я кристально чист, давайте рассмотрим пример сценария:

  • GET запрос № 1: имя «Джон Доу» хранится в global.userName

  • GET запрос № 2: в начале запроса global.UserName не назначен и абсолютно не содержит "john doe"

Другими словами, является global объектомпереинициализируется с каждым запросом или он сохраняется до тех пор, пока сервер находится в рабочем состоянии, доступен для всех запросов, поступающих на сервер, и нет никаких «хитростей», которые могли бы привести к нежелательной утечке данных между запросами сервера

Ответы [ 2 ]

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

Объект node.js global является глобальным для всего процесса node.js.Это не имеет ничего общего с Express.Однако в Express есть несколько объектов с разными областями действия, которые можно использовать для сохранения данных в клиентском запросе или события во всех клиентских запросах.Из документов Express:

res.locals

Объект, содержащий локальные переменные ответа, ограниченные областью запроса и, следовательно, доступные только представлениям.) отображается во время этого цикла запроса / ответа (если есть).

app.use(function(req, res, next){
  res.locals.user = req.user;
  res.locals.authenticated = ! req.user.anonymous;
  next();
});

app.locals

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

Объект Express app.locals аналогиченк глобальному объекту node.js, поскольку он поддерживается в памяти по нескольким запросам.Однако он является локальным для экземпляра Express, и если этот экземпляр будет удален, то же самое будет и с объектом app.locals.Объект node.js global отличается тем, что он останется в течение жизненного цикла всего процесса node.js.

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

Да, глобальные переменные будут сохраняться для любого запроса.Если вы не раскручиваете другой экземпляр вашего узла приложения.Если вам нужны некоторые инструменты аутентификации / сеанса, их довольно много, например passport или cookie-parser

...