Node.js res.redirect在同一路由上创建另一个请求
这是我第一次来这里,所以我希望我的帖子是正确的 我正在使用Loopback,当我尝试重定向到另一个路由时遇到了问题。 基本上我有两个中间产品。首先,与Firebase检查用户是否经过身份验证并允许访问/dashboard。如果没有,我调用next()中间件,这个中间件将重新重定向回/login Dashboard.js:Node.js res.redirect在同一路由上创建另一个请求,node.js,express,firebase,firebase-authentication,loopback,Node.js,Express,Firebase,Firebase Authentication,Loopback,这是我第一次来这里,所以我希望我的帖子是正确的 我正在使用Loopback,当我尝试重定向到另一个路由时遇到了问题。 基本上我有两个中间产品。首先,与Firebase检查用户是否经过身份验证并允许访问/dashboard。如果没有,我调用next()中间件,这个中间件将重新重定向回/login Dashboard.js: 'use strict'; const firebase = require("firebase"); exports.dashboard
'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”);”将在控制台上显示两次,或者在流上显示任何其他日志。看起来又提出了一个请求,但我不明白为什么或者如何。如果删除重定向并简单地结束响应或呈现页面,则不会出现问题
谢谢!:)
更新
我回到这里,仍然没有解决办法。这让我快发疯了
您可能以错误的方式使用中间件
app.get('/dashboard', dashboard.dashboard, dashboard.notLogged);
此行表示在运行dashboard.dashboard之后,dashboard.notLogged仍将运行,无论您是否调用next()
所以你可以这样解决问题:
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" );
notLogged()
}
并从此处删除notLogged:
app.get('/dashboard', dashboard.dashboard)
这是不正确的。如果您正在构建中间件链,则它们将按顺序调用,并且仅当前面的中间件正在调用
next()
。是的,这实际上是错误的。这样,响应就卡在“else”中,什么也没发生。无论如何,谢谢!:)我试着这样做:在else:notLogged(req,res)代码>和中间件:函数notLogged(req,res){console.log(“无人登录”);res.status(200);res.redirect('/login');res.end()}exports.notLogged=notLogged代码>这也可以,但没有解决问题:/