0

类似的问题(但不是重复的):如何在 node.js 中存储请求级变量?

考虑以下代码:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
   req.someVariable = "Hello";
   res.send(req.someVariable + ' world!');
});

存储在哪里req.someVariable?在饼干里?这仅适用于用户还是所有人?此外,这些和将它们存储在会话/cookies 之间有什么区别?

4

1 回答 1

2

除了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。

于 2021-05-09T05:22:32.570 回答