这是我第一次来这里,所以我希望我发布的是正确的。
我在这里使用 Loopback,当我尝试重定向到另一条路由时遇到问题。 基本上我有两个中间件。首先,使用 Firebase 检查用户是否已通过身份验证并允许访问/dashboard。如果不是,我调用 next() 中间件,这个中间件再次重定向回/login。
仪表板.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");”将在控制台或流中的任何其他日志上出现两次.看起来好像提出了另一个请求,但我不明白为什么或如何。如果我删除重定向并简单地结束响应或呈现页面,则不会出现问题。
谢谢! :)
更新
我回到这里,仍然没有解决方案。这让我发疯。
最佳答案
您可能以错误的方式使用了中间件。
app.get('/dashboard', dashboard.dashboard, dashboard.notLogged);
这一行意味着在运行 dashboard.dashboard 之后,无论是否调用 next(),dashboard.notLogged 都会运行
所以你可以这样解决问题:
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)
关于node.js - res.redirect 在同一路由上创建另一个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39198729/