1

私は 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");
    }
});
4

1 に答える 1

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"、 は単に実行されません。

コードが機能するためには、この特定の順序でコードを表示する必要があることに注意してください (最初にミドルウェア、2 番目にルート)。

于 2016-04-25T14:07:13.390 に答える