[英]How to get response headers using express.js
我正在嘗試使用 express js 獲得響應 header,但我嘗試的方法都不起作用。 這是我設置 header 的地方:
return res.status(400).header('loginError', error.details[0].message).redirect('/login');
這有效,我可以在檢查元素的 .network 選項卡中看到 header,但是當我嘗試訪問它時,它沒有返回值。 我試過了:
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),您可以輕松地將數據從一個請求發送到另一個請求,而不是使用標頭。 我不知道這是否是發送商店數據的安全方式,如果其他人有更多信息可以隨時回復。
從您提出的解決方案來看,聽起來您正在嘗試進行重定向,但是發送一些帶有重定向的數據,當客戶端請求重定向的 URL(在下一個請求時)時,這些數據將返回到服務器。
您不能將自定義 header 與重定向一起使用。 header 將 go 發送給瀏覽器,但瀏覽器不會在重定向 URL 之后的請求中包含 header。因此您的服務器不會再次返回 header。
您可以通過以下方式將數據從一個請求發送到同一客戶端的下一個請求:
在重定向上設置查詢參數,以便當瀏覽器將重定向的 URL 發送到服務器時,您作為查詢參數附加的數據將成為 URL 的一部分,您的服務器可以在其中查找並使用它。 這對於不是特別機密的數據很有用。
使用服務器端 session例如express-session
。 然后,您可以在 session object(這是每個用戶唯一的 object)中設置一條特定於客戶端的數據,發送您的重定向響應,然后當重定向的 URL 返回下一個請求時,您的服務器可以檢查 session對於數據(讀取該數據並可能清除它)。
設置一個 cookie並發送重定向響應,然后當重定向的請求返回到您的服務器時,您可以檢查 cookie 並在 cookie 中獲取您想要的任何內容(並刪除 cookie)。
如果與您的特定用例相關,則在服務器端 session 中使用數據是最安全的(因為數據永遠不會離開服務器)。
您不能使用req.app.get()
和req.app.set()
因為它們對您的服務器來說是全局的,因此多個用戶將爭奪相同的值,從而導致並發問題(一個用戶的值超過另一個用戶或一個用戶的值)用戶獲取屬於另一個用戶的數據)。 這是一種錯誤的體驗,只會偶爾打擊您,並且很難重現和弄清楚為什么會出錯。 不要這樣做。 這類似於嘗試將來自兩個用戶的數據存儲在同一個服務器端變量中。 只會導致問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.