2016-07-19 3 views
1
/** 
* @api {post} /logout Logout from system 
* @apiName Logout 
* @apiGroup Login 
*/ 
router.post("/logout", function (req, res) { 
    req.logout(); 
    req.session.destroy(); 
    return res.redirect("/"); 
}); 

私はNode.js Express : How to redirect page after processing post request?と読みましたが、解答を理解できませんでした。投稿リクエスト後にページをリダイレクトする[Express 4]

最近GETではなくPOSTにログアウトを変更しました。そうした後、

POST /logout 307 4.912 ms - 36 
POST/302 3.922 ms - 23 
GET/200 7.519 ms - - 

does'nt仕事をリダイレクト私はクライアント側でそれを手動で行うことができますが、私は同様に、サーバー側でそれを行う方法を知りたいです。これは可能ですか?

CLIENT

HTML

<a href="javascript:;" onclick="logOut();"> 

JS

function logOut() { 
     $.post("/logout"); 
    } 
+0

は、実際のHTMLフォームの送信(なしJavaScriptの関与)またはJavaScript生成されたAJAX呼び出しから来たあなたの '/ logout'ルートですか?私は、Ajaxコールからのリダイレクトがないので尋ねます。 – jfriend00

+0

ajax呼び出しからリダイレクトすることはできません。 – Iceman

答えて

3

あなた$.post()はJavascriptを生成Ajax呼び出しからのリダイレクトはありません。 Ajaxは要求を送信し、応答を取得します。 AJAX呼び出し自体は、ページの場所をまったく変更しません。これはAjaxコールの特徴です。

リダイレクトは、ブラウザが新しいページをロードして、ブラウザが新しいソースにロードするページを変更するように指示します。ブラウザがAjaxコールを送信するだけではありません。

$.post()が終了した後に、クライアント側のJavascriptを使用してクライアント側からリダイレクトすることができます。 $.post()からの応答を新しい場所にすることもできます。クライアント側のJavaScriptは、その新しいURLにwindow.locationを設定するだけです。

function logOut() { 
    $.post("/logout").then(function(data) { 
     window.location = data.redirectUrl; 
    }); 
} 

そして、サーバー上:

router.post("/logout", function (req, res) { 
    req.logout(); 
    req.session.destroy(); 
    res.send({err: 0, redirectUrl: "/"}); 
}); 
+0

私は見る!実装が賢明であれば、何が良い習慣になるでしょうか?サーバーがステータスコードを送信し、クライアントが決定できるようにするには?または、クライアントのサーバーを更新する方法を見つける必要がありますか? – Zanko

+0

@ Zanko - クライアントとサーバーの両方のオプションを追加しました。 – jfriend00

+0

ありがとうございました!ここでの重要な教訓は、リダイレクトがajax呼び出しでは機能しないことです。つまり、ajaxが通知されなかった場合、フォーム提出は、ブラウザに新しいページをロードするPOST要求をトリガーします。 – Zanko

関連する問題