18

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

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

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

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

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

4

1 回答 1

4

我现在想要这个查询的结果,它是一个 json 数组,可作为所有视图的变量。“存储”结果数组以便每个视图都可以访问它的最佳方法是什么?

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

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

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

于 2013-03-08T15:06:28.297 回答