這是我第一次來這裏,所以我希望我可以正確地發佈此信息。res.redirect在同一條路線上創建另一個請求
我在這裏使用Loopback,當我嘗試重定向到另一條路由時遇到問題。 基本上我有兩個中間件。第一種方法是使用Firebase檢查用戶是否經過身份驗證並允許訪問/儀表板。如果不是,我打電話給下一個()中間件,然後這個中間件再次重定向回/登錄。
Dashboard.js:
'use strict';
const firebase = require("firebase");
exports.dashboard = (req, res, next) => {
firebase.auth().onAuthStateChanged((user) => {
if (user) {
console.log("Before render: "+res.headersSent); // false
res.render("dashboard", {photoUrl: user.photoURL, displayName: user.displayName, email: user.email });
console.log("after render: "+res.headersSent);
} else {
// console.log("on else" );
next()
}
});
};
exports.notLogged = (req, res) => {
console.log("no one logged in");
res.redirect('/login');
};
路線上server.js:
app.get('/dashboard', dashboard.dashboard, dashboard.notLogged);
上login.js中間件:
exports.login = (req, res) => res.render("login")
及其路徑:
app.get('/login', login.login);
例如,如果我嘗試訪問「/ dashboard」而我沒有登錄,則「console.log(」no one logged in「); 「會在控制檯或其他任何日誌上顯示兩次,看起來又是另一個請求,但我無法理解爲什麼或如何,如果我刪除了重定向並簡單地結束響應或呈現頁面,不會出現問題。
謝謝!:)
UPDATE
嗨,大家好!我回來這裏仍然無解。這是推動我瘋了! 我希望有人來了,告訴我什麼是錯的!:(
再次感謝您。
這是不正確的。如果您正在構建中間件鏈,那麼只有在前一箇中間件調用'next()'的情況下才會按順序調用它們。 – Jonas
是的,這實際上是錯誤的。這樣,響應卡在「其他」中,沒有任何反應。不管怎麼說,還是要謝謝你! :) –
我想是這樣的: 在其他: 'notLogged(REQ,RES);' 而中間件: '函數notLogged(REQ,RES){ 的console.log(「沒有人登錄」); res。狀態(200); res.redirect('/ login'); res.end() } exports.notLogged = notLogged; ' 這也適用,但沒有解決問題:/ –