问题描述
类似的问题(但不是重复的):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 应用程序。这些与 req
和 res
属性不同。
Cookie 可以存储例如身份验证令牌,该令牌可以存储在客户端的浏览器中,并在每次请求时提供给 nodejs 应用程序。
为了安全起见,您可以使用浏览器 javascript 无法修改的 httpOnly cookie。