【问题标题】:Node.js - res.redirect not workingNode.js - res.redirect 不起作用
【发布时间】:2016-04-25 13:17:56
【问题描述】:

我是 node.js 的初学者,目前正在研究 express.js 重定向例程。 到目前为止,代码工作正常,会话变量正在存储并且重定向工作正常。 但是一旦我打开一个新选项卡并尝试输入一个像 (127.0.0.1/login.ejs) 这样的 url,如果我登录它应该重定向到 hub.ejs。但在这种情况下,重定向不起作用。如果我没有登录并在新选项卡中输入例如(127.0.0.1/hub.ejs),也会出现同样的问题。重定向应该加载 login.ejs 但根本没有任何工作。页面保持空白

app.get("/login.ejs", function(req, res)
{
    if(!req.session.userName)
    {
        res.render(__dirname + "/login.ejs");
    }
    else
    {
        res.redirect(__dirname + "/hub.ejs");
    }
});

app.get("/hub.ejs", function(req, res)
{
if(req.session.userName)
{
        res.render(__dirname + "/hub.ejs", {userName: req.session.userName,     clients: clients});
    }
    else
    {
        res.redirect(__dirname + "/login.ejs");
    }
});

【问题讨论】:

标签: node.js express express-session


【解决方案1】:

使用以下代码:

app.use(function(req, res, next) {
    if (!req.session.userName && req.baseUrl !== 'login.ejs') {
        return res.render(__dirname + "/login.ejs");
    }
    next();
})

app.get("/login.ejs", function(req, res) {
    if(req.session.userName) {
        return res.redirect(__dirname + "/hub.ejs");
    }
    res.render(__dirname + "/login.ejs");
});

app.get("/hub.ejs", function(req, res) {
    res.render(__dirname + "/hub.ejs", {userName: req.session.userName,     clients: clients});
});

第一个功能块,app.use 是 express 中间件,它将为所有定义在它之后的路由执行。。它的作用是检查会话是否不可用并且用户没有请求登录页面(以防止重定向循环)。未登录的用户将被重定向到登录页面,否则将执行正确的路由。

对于login.ejs,我们只需检查是否设置了会话并重定向到集线器。请注意return 语句以防止呈现login.ejs 页面。

对于hub.ejs,我们只需渲染该页面。如果用户没有登录,由于我们的中间件,他只会被重定向到登录页面。 app.get("/hub.ejs" 将不会被执行。

请注意,代码应按此特定顺序出现以使其工作(中间件第一,路由第二)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2013-07-16
    • 2016-11-24
    • 2017-11-26
    • 2023-03-03
    相关资源
    最近更新 更多