Node.js - res.redirect不工作

时间:2016-04-25 13:17:57

标签: node.js express express-session

我是node.js和iam的初学者,目前正在开发一个express.js重定向例程。 代码工作到目前为止,会话变量正在存储,重定向工作正常。 但是,一旦我打开一个新选项卡并尝试输入类似(127.0.0.1/login.ejs)的URL,如果iam登录,它应该重定向到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");
    }
});

1 个答案:

答案 0 :(得分:0)

使用以下代码:

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是快速中间件,它将在之后定义的所有路由上执行。它的作用是检查会话是否不可用以及用户是否未请求登录页面(以防止重定向循环)。如果用户未登录,用户将被重定向到登录页面,否则将执行正确的路由。

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

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

请注意,代码应按此特定顺序显示,以使其正常工作(首先是Middlware,第二个是路由)。