req.variable 存储在哪里? res.locals饼干

问题描述

类似的问题(但不是重复的):How do i store request-level variables in node.js?

考虑以下代码

client1=new HttpClient();
this.client1.get<CustomObject>(this.baseUrl + "Customer/Get?pCustomerId=" + pId,options);

client2=new HttpClient();
this.client2.get<CustomObject>(this.baseUrl + "Customer/Get?pCustomerId=" + pId,options);

const express = require('express'); const app = express(); app.get('/',(req,res) => { req.someVariable = "Hello"; res.send(req.someVariable + ' world!'); }); 存储在哪里?在饼干里?这仅适用于用户还是所有人?另外,这些与将它们存储在会话/cookie 中有什么区别?

解决方法

除了 req 只是一个存储在内存中的 javascript 对象变量之外,请注意 express 有一个 res.locals 对象变量,它在请求/响应周期中持续存在。

如果您想存储任何用户信息,您应该使用 res.locals 对象,以免意外覆盖其他重要对象。

res.locals

一个包含作用域为响应局部变量的对象 请求,因此仅适用于期间呈现的视图 该请求/响应周期(如果有)。否则,这个属性是 与 app.locals 相同。 此属性可用于公开请求级信息,例如请求路径名、已验证用户、用户设置和 以此类推。

http://expressjs.com/en/5x/api.html#res.locals

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

注意:res.locals 本身不会与响应一起发送(例如 res.send)。它只能在您的 nodejs 应用程序中访问。

饼干

Cookie 是您要发送到客户端浏览器(存储在浏览器内存中)的信息位。然后客户端可以将 cookie 发送回您的 nodejs 应用程序。这些与 reqres 属性不同。

Cookie 可以存储例如身份验证令牌,该令牌可以存储在客户端的浏览器中,并在每次请求时提供给 nodejs 应用程序。

为了安全起见,您可以使用浏览器 javascript 无法修改的 httpOnly cookie。