我有一个疑问:假设用户导航到path /test?token=somelongstring
。在呈现视图之前,此路径设置了两个app.locals
,例如:
app.locals.email: "test-user-email" + user.email;
app.locals.name: "test-user-name" + + user.name;
该user
变量是使用令牌查询字符串变量从API中获取的。
比另一个用户使用不同的令牌走到相同的路径,并用他的值设置这两个变量。
现在,假设有另一条路线/display
显示了这些变量。用户2设置了以后,用户1会转到该路径app.locals
。用户1将看到什么?他会看到他的值还是user2值?我想是user2,因为它app.locals
是在应用程序而不是实例之间共享的,但是我不确定(并且很遗憾,我现在无法测试自己)
您应该考虑在这里阅读官方文档
基本上app.locals
是在整个应用程序中全局访问的属性。因此,基本上每个用户都将看到对这些属性(电子邮件和名称)的最后一次分配。
假设还有另一条路线/ display显示这些变量。用户2设置好app.locals之后,用户1会转到该路径。用户1将看到什么?
他将看到user2
信息,因为他/她最后一次将他/她的信息分配给了属性。
理解,所以而不是
app.locals
我应该使用req.locals
,因为这在请求中一直存在,对吗?您将必须设计一种永久性数据存储,该存储知道如何区分各个用户,以便每个用户的请求都能获得其先前请求留下的数据。无论是
app.locals
也req.locals
足以做到这一点。我最终使用了会话中间件并将这些值存储在会话对象中