node.js - Express.js : app. locals vs res.locals vs req.session

标签 node.js express pug

我试图了解何时最好使用以下各项。这是我的初步理解:

app.locals -- 适合在应用级别存储全局变量。所有用户/ session 将看到这些变量的相同值。变量可用于所有 View 。

res.locals -- 适合存储特定请求/响应周期的变量。这些变量仅对与响应关联的 View 可用。

req.session -- 适合存储与唯一用户 session 相关的变量(例如,用户名)。这些变量应该可用于唯一用户/ session 的所有 View 。

我的具体用例如下:用户运行从 mongodb 检索数据的查询。我现在想要这个查询的结果,它是一个 JSON 数组,可用作所有 View (HTTP 请求)的变量。 “存储”结果数组以便每个 View 都可以访问它的最佳方式是什么?

最佳答案

I now want the result of this query, which is a json array, available as a variables to ALL of the views. What's the best way to "store" the result array so that each view can access it?

当您说“可用于所有 View ”时,我假设您的意思是所有 HTTP 请求。如果是这种情况,那么您需要注意 HTTP 是一种无状态协议(protocol),并且不提供此功能。您需要为此开发自己的机制。

这样做的一种方法是在服务器上缓存此信息(数组)并在每次请求时检索它(例如,从内存而不是从 MongoDB 中检索它)。您将在 cookie 上存储一个 session ID,并在另一个请求通过时基于此 ID 从缓存中获取它。有几种可用的缓存工具(例如 redis、memcached 等),您可以选择将信息存储在内存中。

您还可以对这些信息(数组本身)进行 cookie,在这种情况下,它将在每次 HTTP 请求时在客户端和服务器之间来回发送,除非数据非常好,否则很可能不是一个好主意小的。

关于node.js - Express.js : app. locals vs res.locals vs req.session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294941/

相关文章:

javascript - try catch 在 Node socket.io 监听器中不起作用

javascript - req.ip 可以在 Express.js 中伪造吗?

javascript - 表达性能要求的模块

javascript - Gulp 4 browserSync 与 Pug 和 Parceljs 任务并行

javascript - 在 AngularJS 中调用模态指令后 $scope 变量会重置

mysql - 从 MySQL 数据库获取数据并将其传递给 jade 并使用 nodejs 访问它

javascript - 无法读取 ExternalModuleFactoryPlugin.js :30 处未定义的属性 'tapAsync'

javascript - 使用 google drive api 上传 excel 文件

node.js - 类名jade中的变量

javascript - 如何在 Express.js 中定义各个页面