是node.js服务器范围内的全局变量,还是只针对该会话或用户

Are global variables in node.js server wide or just for that session or user

本文关键字:会话 用户 js node 服务器 范围内 全局变量      更新时间:2023-09-26

我有一个非常基本的问题和道歉,如果它是愚蠢的-全局变量在node.js服务器范围内,还是它只是为会话或用户?例如,我正在考虑在routes.js文件下创建一个全局布尔变量来存储twitter凭据是否已经验证,如果已经验证,则不应该重新验证。

然而,我想知道变量是否会为每个会话/用户创建,还是会为整个服务器创建一次(即,如果一个人验证,将verifiedCredentials设置为true,该变量是否为所有其他用户?)。

routes.js (Server side):
'use strict';
var verifiedCredentials = false;
/**
 * Application routes
 */
module.exports = function(app) {
  // Server API Routes
  app.get('/api/awesomeThings', function(req, res) {
    if (!verifiedCredentials) {
      //do some verification
      verifiedCredentials = true;
    }
  });
}

这个测试并不难。

但是由于你没有这样做,结果是:全局变量是真正的全局变量,在node的核心中没有会话/用户上下文。

实际上node并不是一个真正的http服务器程序,它是一个基于事件的引擎,你可以在上面运行很多东西,它经常被用来运行基于http的应用程序(但它可以用于甚至没有会话或用户概念的应用程序)。

如果你确实需要将变量附加到会话,那么,当你使用express时,只需要求它管理会话并存储变量,如

req.session.verifiedCredentials = false;

请注意,如果您正在尝试管理身份验证,正如您的变量名所示,您可能对已经测试过的模块感兴趣,例如passport。