2016-08-29 7 views
0

であることを確認してください。私はJadeとExpressJSを使って自分のサイトに簡単なログインをしています。それはすべて動作している、私が唯一の問題は、ユーザーが間違ったログインを詳細に入力するときです。間違った詳細を入力すると、URLのパラメータ(/admin?falseLogIn)を使用してログインページにリダイレクトされます。私の質問は:このGET変数が私のjadeビューに存在するかどうかをどうやって確認できますか?URLのGET変数が

これは私のコードです:

ログin.jade

form(action="/log-in" method="post") 
    label Username 
    input(type="text" class="form-control" name="username" placeholder="Username") 
    label Password 
    input(type="text" class="form-control" name="password" placeholder="Password") 
    input(type="submit" class="btn btn-info pull-right" style="margin-top: 15px;" value="Log In") 

app.js

app.get("/admin",function(req, res){ 

    if(req.session.userName){ 
     res.render("admin", {session_name: req.session.userName}); 
    }else{ 
     res.render("log-in"); 
    } 

}); 

app.post("/log-in", function(req, res){ 

    var admin = Admin.findOne({"username": req.body.username, "password": req.body.password}); 
    admin.count(function(error, count){ 
     //console.log(count); 
     if(count > 0){ 
      req.session.userName = req.body.username; 
      res.redirect("/admin"); 
     }else{ 
      res.redirect("/admin?falseLogIn"); 
     } 
    }); 
}); 

私は私のヒスイのビュー内で次のことを試してみましたが、取得エラーCannot read property 'location' of undefined

- var page = window.location.pathname 

if page === "/admin?falseLogIn" 
    .alert.alert-danger Error! Wrong details, please try again! 

私が使用してHTMLで直接チェックすることができるだろうPHPにおけるので、私は、PHPの背景から来る:

<?php if(isset($_GET['falseLogIn'])){// display error to user } ?> 

すべてのヘルプは大歓迎です。ありがとう!あなたはscript(type='text/javascript').

script(type='text/javascript'). 
    var page = window.location.pathname 

の下であなたにスクリプトを記述する必要がありますしかし、あなたはURLを比較したい場合は、あなたの代わりにpathnamesearch一部を取得する必要があります

+0

管理ページコントローラのReq.query.falseLogin – Kevin

+0

@Kevinありがとうございますが、正確にそのコードを入力する必要がありますか? –

答えて

2

まず、私が使用することをお勧めしますクエリ文字列の完全なキー値/admin?login=false

次に、を使用します特定の変数を取得してヒスイ・ビューに渡すか、またはres.localsを使用して、ビューで変数にアクセスできるようにします。

app.js

app.get("/admin",function(req, res){ 

    res.locals.login = req.query.login; // this would be accessible in your view as 'login' 

    if (req.session.userName) { 
    res.render("admin", {session_name: req.session.userName}); 
    } else { 
    res.render("log-in", { 
     login: req.query.login, // or pass variable to your view directly, also accessible in your view as 'login' 
    }); 
    } 
}); 

推論。私はあなたのビューであなたのURLクエリを直接解析するのは良い習慣だとは思わない。これは$ _GETを使ってあなたのサンプルのような生のphpでも問題ありませんが、例えばLaravelのようなMVCフレームワークを使用すると、すぐにそこから離れることになります。コントローラがクエリに基づいてロジックを処理し、関連する情報をビューに渡すという仕事をします。あなたの見解では、単純なプレゼンテーションロジックでなければなりません。

+0

ありがとう、私はちょっとこれに新しいので、私はまだ物事のハングアップを取得しようとしています。ええ、それは今働いています。再度、感謝します! :) –

+0

Np、我々はすべて学習している。 =) – Dan

0

script(type='text/javascript'). 
    var page = window.location.search 
    if(page === '?falseLogIn'){/* some code here, display the error */} 
+0

ありがとう、私はスクリプトタグを追加し、パスと検索クエリ(/ admin?falseLogIn)を取得することができます。唯一の問題は、URLを比較してエラーメッセージを表示しようとするときです。その部分は機能していません。 –

+0

実際には、 'window.location.pathname'にはurlの検索部分は含まれていません。私はちょうど答えを更新しています。それを確認してください。 – huachengzan