REST-Routen in Express JS einrichten, damit Ajax nur mit Backbone verwendet werden kann

7

Ich arbeite daran, eine bestehende Website mit Node.js mit Express neu zu schreiben.

Das Frontend der Seite wird Backbone JS verwenden und somit müssen alle notwendigen Routen mit der nativen Backbone-Synchronisation übereinstimmen. Jetzt sind die meisten URLs der Client und die Backbone-Synchronisation gleich. Aber sie funktionieren nicht für reguläres GET, da sie JSON zurückgeben müssten.

Also denke ich, wäre es eine gute Idee, Erweiterungen zu Model / Collection URLs im Backbone hinzuzufügen, wie zum Beispiel .json , und in Express, um dies für jede Route zu haben:

%Vor%

Wo if (req.params.id == 'json') als wir JSON senden, sonst rendern wir HTML?

Oder gibt es einen besseren Ansatz? Bitte helfen.

    
mvbl fst 09.06.2012, 03:10
quelle

4 Antworten

12

Der bessere Weg dazu wäre, die Inhaltsverhandlungsfunktion in Express 3.x, nämlich res.format :

zu verwenden

Ссылка

%Vor%

Sie nähern sich auch, Yammer für ex. verwendet denselben Ansatz: Ссылка

    
alessioalex 09.06.2012, 09:42
quelle
6

Verwenden Sie in Ihren Anfragen Accept headers: Accept: application/json , wenn Sie JSON erhalten möchten, Accept: text/HTML , wenn Sie HTML wollen.

    
ebohlman 09.06.2012 03:18
quelle
2

Eine Alternative, die auch prüft, dass der Header "X-Requested-With" für jQuery et al gesetzt ist.

%Vor%

NB Unterstrich ist eine Abhängigkeit.

    
techjacker 07.12.2012 12:11
quelle
2

Ich denke, der richtige Weg ist die Implementierung von Content-Negotiation in Ihre Anwendung. Ja, Express 3.x ist eine Möglichkeit, dies zu tun und bietet eine direkte Antwort auf Ihre Frage, aber ich denke nicht, dass es der beste Weg ist, dies zu tun, weil es die Verantwortung für die Inhaltsverhandlung in die Routing-Logik einbringt. Ich denke nicht, dass das ein guter Platz dafür ist, weil es nicht dem Prinzip single responsibility folgt, nachdem es < strong> Inhaltsverhandlung in der Routing-Logik.

Ich habe in meiner Blog-Engine eine Content-Verhandlung eingeführt ; Durch eine Überprüfung können Sie in eine gute Richtung führen. Das Wesentliche ist, dass der Code die Dateierweiterung über die Inhaltsverhandlung Logik bestimmt. Dann sucht er mit der Dateierweiterung die entsprechende View-Datei, rendert sie in eine Response und sendet sie zurück an den Client. Die Idee ist, dass sie mit der angeforderten Ressource in der angeforderten Darstellung pro Inhaltsverhandlung antwortet. Die Routing-Logik gibt nur eine Ansicht an, hat aber keine Ahnung von Inhaltsverhandlung. Dies geschieht außerhalb der Routing-Logik, was zu einem flexibleren Design führt.

Das Ergebnis dieses Entwurfs ist die Fähigkeit, nach einer bestimmten Repräsentation der Ressource zu fragen:

Ссылка und erhalten Sie eine JSON-Darstellung Ссылка und HTML-Darstellung teilweise (oder ein HTML-Fragment) erhalten Ссылка und eine XML-Repräsentation erhalten.

    
Joey Guerra 16.11.2013 16:53
quelle