gpt4 book ai didi

node.js - res.redirect 在同一路由上创建另一个请求

转载 作者:搜寻专家 更新时间:2023-10-31 23:52:23 24 4
gpt4 key购买 nike

这是我第一次来这里,所以我希望我发布的是正确的。

我在这里使用 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");”将在控制台或流中的任何其他日志上出现两次.看起来好像提出了另一个请求,但我不明白为什么或如何。如果我删除重定向并简单地结束响应或呈现页面,则不会出现问题。

谢谢! :)

更新

我回到这里,仍然没有解决方案。这让我发疯。

Double GET happening after res.redirect :(

最佳答案

您可能以错误的方式使用了中间件。

 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)

http://expressjs.com/en/4x/api.html#router

关于node.js - res.redirect 在同一路由上创建另一个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39198729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com