2016-07-19 5 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("/"); 
}); 

Ich habe Node.js Express : How to redirect page after processing post request? gelesen, konnte aber die Antwort nicht herausfinden.Umleitungsseite nach Postanforderung [Express 4]

Ich habe vor kurzem Logout in POST anstelle von GET geändert. Nachdem ich auf Client-Seite so, umleiten does'nt Arbeit

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

ich es manuell tun, aber ich möchte wissen, wie es auf Server-Seite als auch zu tun. Ist das möglich?

CLIENT

HTML

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

JS

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

Ist Ihr '/ logout' Route von einer aktuellen HTML-Formular Vorlage kommen (kein Javascript beteiligt ist) oder ein Javascript, Ajax-Aufruf generiert? Ich frage, weil es keine Umleitung von einem Ajax-Anruf gibt. – jfriend00

+0

können Sie nicht von einem Ajax-Anruf umleiten. – Iceman

Antwort

3

Es gibt keine Umleitungen von einem Javascript erzeugt Ajax-Aufruf, die Ihre $.post() ist. Ajax sendet eine Anfrage, erhält eine Antwort. Ein Ajax-Aufruf allein ändert den Seitenort überhaupt nicht. Das ist eine Eigenschaft von Ajax-Anrufen.

Umleitungen funktionieren, wenn der Browser eine neue Seite lädt und der Server sagt, dass er ändern soll, welche Seite er in eine neue Quelle lädt, nicht wenn der Browser gerade einen Ajax-Aufruf sendet.

Sie können natürlich Ihr clientseitiges Javascript verwenden, um nach dem $.post() die Umleitung von der Clientseite zu entscheiden. Sie könnten sogar die Antwort von der $.post() den neuen Speicherort sein und Ihr Client-Side-Javascript könnte dann nur window.location auf diese neue URL setzen.

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

Und auf dem Server:

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

Ich sehe! Implementierung, was wäre eine gute Praxis? Für Server, um einen Statuscode zu senden und den Client entscheiden zu lassen? Oder sollte ich eine Möglichkeit finden, den Server für den Client zu aktualisieren? – Zanko

+0

@Zanko - Ich habe eine Option für Client und Server hinzugefügt. – jfriend00

+0

Vielen Dank! Die wichtigste Lektion hier ist, dass die Umleitung nicht mit einem AJAX-Aufruf funktioniert. Also, mit anderen Worten, wenn ajax nicht informiert wurde, wird eine Formularübermittlung eine POST-Anfrage auslösen, die dazu führt, dass der Browser eine neue Seite lädt? – Zanko

Verwandte Themen