如何使用 express.js 获得响应 headers

How to get response headers using express.js

我正在尝试使用 express js 获得响应 header,但我尝试的方法都不起作用。 这是我设置 header:

的地方
   return res.status(400).header('loginError', error.details[0].message).redirect('/login');

这有效,我可以在检查元素的网络选项卡中看到 header,但是当我尝试访问它时它没有 return 值。 我试过:

res.getHeader("loginError"), res.get("loginError"), res.header("loginError")

这是我的 ejs 代码:

   <div class="login-form-error">
        <div class="login-form-error__inner">
             <span id="login-form-error__span"><%=loginError%></span>
   </div>
</div>
<% } %>

我在呈现页面时设置了 loginError 变量:

 res.render('login/index.ejs', {
        loginError: res.header
    });

感谢任何帮助,抱歉,如果这是一个愚蠢的问题

对于任何想知道的人:我发现如果你使用 req.app.get(var) 和 req.app.set(var, value),而不是使用 headers,你可以轻松地从一个请求发送数据给另一个。我不知道这是否是发送商店数据的安全方式,如果其他人有更多相关信息,请随时回复。

从您提出的解决方案来看,您似乎在尝试进行重定向,但发送一些带有重定向的数据,当客户端请求重定向 URL(在下一个请求)。

您不能将自定义 header 与重定向一起使用。 header 将转到浏览器,但浏览器不会在重定向 URL 之后的请求中包含 header。所以你的服务器不会再得到 header。

您可以通过以下方式将数据从一个请求发送到同一客户端的下一个请求:

  1. 在重定向上设置一个查询参数,这样当浏览器将重定向的URL发送到服务器时,您附加的数据作为查询参数将是 URL 的一部分,您的服务器可以在其中查找并使用它。这对于不是特别机密的数据很有用。

  2. 使用 server-side session 例如 express-session。然后,你可以在 session object 中设置一条 client-specific 数据(这是每个用户唯一的 object ),发送你的重定向响应,然后当重定向URL 在下一个请求时返回,您的服务器可以检查 session 中的数据(读取该数据并可能清除它)。

  3. 设置 cookie 并发送重定向响应,然后当重定向请求返回到您的服务器时,您可以检查 cookie 并获取任何内容你想要在 cookie 中(并删除 cookie)。

如果与您的特定用例相关,则在 server-side session 中使用数据是最安全的(因为数据永远不会离开服务器)。


您不能使用 req.app.get()req.app.set(),因为它们对您的服务器来说是全局的,因此多个用户将争夺相同的值,从而导致并发问题(其中一个用户的值超过另一个用户的值或一个用户获取属于另一个用户的数据)。这是一种错误的体验,只会偶尔打击您,并且很难重现和弄清楚为什么会出错。不要这样做。这类似于尝试将来自两个用户的数据存储在同一个 server-side 变量中。只会导致问题。