2017-07-11 5 views
0

Ich versuche fetch für einfache Post-Anforderung zu verwenden:res.render() und res.redirect() verhalten sich wie res.send()

const headers = new Headers({ 
    Accept: 'application/json', 
    'Content-Type': 'application/json', 
}); 

fetch('/checkout/billing', { 
     headers, 
     body, 
     credentials: 'include', 
     method: 'POST', 
     }) 
     .catch(console.error); 

und der Server-Seite Endpunkt wie folgt aussieht:

if (!validateResult) { 
     res.redirect('/checkout/shipping'); 
     } else { 
     view.render('checkout/billing') 
     } 

Also, wenn ich einreichen bin mit regelmäßigen HTML-Formular, es funktioniert (Umleitungen oder macht), aber wenn ich fetch statt Umleitung bin mit oder Rendering-I erhalten HTML Körper als Antwort, wie wenn ich res.send(html) verwenden würde, irgendeine Idee, was dieses Problem verursachen kann?

+0

Wie lautet der Pfad "checkout/billing"? Wenn es HTML ist, dann ist das, was du bekommst, normal –

+0

in 'view.render ('checkout/billing')' '? Es ist Pfad zu HTML-Vorlage, aber es sollte nicht zurückgegeben werden HTML als Antwort, sollte es diese Seite –

+0

Rendern, was Sie _rendering eine Seite aufrufen_ tatsächlich sendet HTML an einen Client (Ihr Browser), so dass es rendern kann. Also ja, es sollte HTML zurückgeben. Ich werde versuchen, in einer Antwort zu klären :) –

Antwort

1

TL; DR: es sollte senden Sie HTML per spec.

Sie erwarten JSON von Ihrem Client, aber Sie fragen nach einem Pfad, der HTML rendert, deshalb erhalten Sie HTML. Das Wort Das Wort Rendern kann ein wenig verwirrend sein: Es kommt von der Idee, dass Sie eine Vorlage haben (das kann html/pug/bustache/... sein), dass Ihr Server in HTML umgewandelt wird. Aber am Ende, was der Server macht, wenn Sie render ist nur Senden der endgültigen HTML als Antwort auf die Anfrage des Kunden gemacht.

Wenn also die Anfrage für eine Ansicht in HTML ist, wird dies wie erwartet funktionieren. Aber wenn Sie eine AJAX-Anfrage machen wollen, dann haben Sie dieses seltsame Verhalten, das Sie bekommen.

+0

Dank für die Erklärung, was soll ich anstelle von 'Accept: 'Anwendung/Json''? –

+0

Ich kenne nicht Ihre gesamte Anwendung, wenn Ihr Ziel ist, umleiten Sie könnten was auch immer akzeptieren und Redirect beim Rückruf Ihrer Anfrage. Oder wenn Ihre Anwendung in einem [SPA] (https://en.wikipedia.org/wiki/Single-page_application), dann sollten Sie JSON von Ihrem Server senden und Ihre Änderung im Front-End mit Javascript behandeln. –

Verwandte Themen