我正在嘗試使用 express js 獲取回應標頭,但我嘗試的方法不起作用。這是我設定標題的地方:
return res.status(400).header('loginError', error.details[0].message).redirect('/login');
這有效,我可以在檢查元素的網路選項卡中看到標題,但是當我嘗試訪問它時它不會回傳值。我試過了:
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
});
任何幫助表示贊賞,對不起,如果這是一個愚蠢的問題
uj5u.com熱心網友回復:
從您提出的解決方案中,聽起來您正在嘗試進行重定向,但是發送一些帶有重定向的資料,當客戶端請求重定向的 URL(在下一個請求時)時,這些資料將回傳到服務器。
您不能將自定義標頭與重定向一起使用。標頭將轉到瀏覽器,但瀏覽器不會在重定向 URL 之后的請求中包含標頭。因此,您的服務器不會再次獲取標頭。
您可以通過以下方式將資料從一個請求發送到來自同一客戶端的下一個請求:
在重定向上設定查詢引數,以便當瀏覽器將重定向的 URL 發送到服務器時,您作為查詢引數附加的資料將成為 URL 的一部分,您的服務器可以在其中查找并使用它。這對于不是特別機密的資料很有用。
使用服務器端會話,例如
express-session. 然后,您可以在會話物件(每個用戶的唯一物件)中設定特定于客戶端的資料,發送重定向回應,然后當重定向的 URL 在下一個請求中回傳時,您的服務器可以檢查會話對于資料(讀取該資料并可能清除它)。在發送重定向回應的同時設定一個 cookie,然后當重定向的請求回傳到您的服務器時,您可以檢查 cookie 并在 cookie 中獲取您想要的任何內容(并洗掉 cookie)。
如果與您的特定用例相關,在服務器端會話中使用資料是最安全的(因為資料永遠不會離開服務器)。
您不能使用req.app.get()并且req.app.set()因為它們對您的服務器是全域的,因此多個用戶將爭奪相同的值,從而導致并發問題(其中一個用戶的值超過另一個用戶的值,或者一個用戶獲取屬于另一個用戶的資料)。這是一種錯誤的體驗,只會偶爾打擊你一次,而且很難重現和找出問題所在。不要這樣做。這類似于嘗試將來自兩個用戶的資料存盤在同一個服務器端變數中。只會導致問題。
uj5u.com熱心網友回復:
對于任何想知道的人:我發現如果您使用 req.app.get(var) 和 req.app.set(var, value) 代替使用標頭,您可以輕松地將資料從一個請求發送到另一個請求。我不知道這是否是發送存盤資料的安全方式,如果其他人有更多資訊,請隨時回復。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/460593.html
標籤:javascript 节点.js 表示 ejs 回复
