2014-01-29 5 views
6

Warum funktioniert das Folgende nicht?res.send(), dann res.redirect()

res.send({ 
    successMessage: 'Task saved successfully.' 
}); 
res.redirect('/'); 

Ich brauche im Grunde die successMessage für AJAX-Anfragen. Die Umleitung ist erforderlich, wenn es sich bei der Anforderung um eine Standardpostanforderung (nicht AJAX) handelt.

Der folgende Ansatz scheint nicht sehr sauber zu mir zu sein, wie ich über die Front-End-Technologie in meinem Backend nicht kümmern will:

if(req.xhr) { 
    res.contentType('json'); 
    res.send({ 
     successMessage: 'Aufgabe erfolgreich gespeichert.' 
    }); 
} else { 
    res.redirect('/'); 
} 

Antwort

3

Sie können einen Statuscode verwenden, um anzugeben, dass Ihre Aufgabe gespeichert und dann umgeleitet wurde. Versuchen Sie folgendes:

res.status(200); 
res.redirect('/'); 

ODER

res.redirect(200, '/'); 

Da AJAX-Codes Erfolg oder Misserfolg kennt, so zum Beispiel, wenn Sie 404 senden werde, AJAX Erfolg Funktion nicht

+0

Was ist, wenn Sie in einer Weiterleitung Daten an Ihre App senden möchten? – JaKXz

+0

machen Sie eine Ajax-Anfrage an den Server, wenn die umgeleitete Seite geladen wird. –

1

Der erste Schnipsel nicht, weil res.send funktioniert sendet bereits Header, so dass die res.redirect danach einfach unmöglich ist.

Das zweite Snippet sollte funktionieren. Im Grunde ist es eine Überprüfung, ob die Anfrage AJAX ist (dann gibt JSON zurück), ansonsten findet eine Umleitung statt.

+0

ausführt Aber gibt es eine sauberer Ansatz? – mosquito87

+1

Sicher, trennen Sie Ihre JSON-API von der Bereitstellung von HTML-Seiten. – bredikhin

Verwandte Themen