2009-12-15 3 views
7

Ich versuche, CouchDB mit HTML/Standalone-REST-Architektur zu verwenden. Das heißt, kein anderer App-Server als CouchDB und Ajax-Stil Javascript Aufruf CouchDB.Verwenden von CouchDB zum Bereitstellen von HTML

Es sieht aus wie Cross-Scripting ein Problem ist. Ich habe vorher Cloudkit/Tokyo Cabinet benutzt und es scheint, als ob die benötigte Callback-Funktion es in der URL versaut hat.

Jetzt versuche ich CouchDB und bekomme das gleiche Problem.

Hier sind meine Fragen:

1) wurden diese Probleme sind, weil der REST/JSON-Shop wie CouchDB oder Wolkenjunge auf einem anderen Port aus meiner Web-Seite ausgeführt wird? Sie werden beide lokal ausgeführt und von "localhost" angerufen.

2) Soll CouchDB meine Seite hosten und den HTML-Code liefern?

3) Wie mache ich das? Die Dokumentation didnt so klar scheinen ...

Danke, Alex

Antwort

0

Ich kann dir nicht helfen, eine Schicht zwischen der Präsentationsschicht müssen sich Gedanken (HTML) und das Modell (CouchDB).

Auf diese Weise können Sie Anfragen vermitteln, zusätzliche Einrichtungen und Funktionen bereitstellen. Im Moment scheinen Sie persistente Objekte direkt auf die Präsentationsebene zu rendern, und Sie haben keine Möglichkeit, das Verhalten Ihres Systems in Zukunft zu ändern oder zu erweitern.

eine model-view-controller Architektur Annahme wird Ihr Modell aus der Präsentationsschicht isolieren und geben Ihnen eine gewisse Flexibilität geht nach vorn.

(ich gebe zu, ich kann nicht auf Ihren Cross-Site-Scripting-Fragen beraten)

+2

Brian-, die eigentlich der Sinn dieser Architektur ist. Ich denke, mit Ajax beginnt der Controller-Layer, Client-Seite zu verschieben. Der Controller (und die Arbeit der Aktualisierung der Ansicht) werden in Javascript auf der Seite durchgeführt. So macht es REST/JSON Aufrufe an das Modell. Fertig, es muss eine Autorisierung/Sicherheit Stück auf der Modellseite sein, aber ich prototype Sachen jetzt. Wer weiß über HTML in CouchDB pience? – alxross

3

Ich denke, ein Weg thorugh Mod_proxy in Apache ist. Es leitet die Anfrage von Apache an Couchdb weiter und löst so möglicherweise das Cross-Scripting-Problem.

# Configuration file for proxy 
ProxyVia ON 

ProxyPass /couchdb http://<<couchdb host>>:5984/sampleDB 
ProxyPassReverse /couchdb http://<<couchdb host>>:5984/sampleDB 
+0

Aha - danke. Das ist eine gute Idee, um mit dem Cross-Scripting zu helfen. Wissen Sie (oder jemand anders), wie Sie CouchDB dazu bringen, das HTML zu bedienen? Es soll das können und ich habe Hinweise darauf gefunden, es "im Design-Dokument" zu machen, aber ich konnte nicht genau sehen, wie ... – alxross

+0

Sie können sich einfach "couchapps" in der öffnen. Z.B. http://github.com/jchris/toast/ ist sehr klein und verständlich. Richten Sie couchapp ein und führen Sie einen "couchapp push." ​​Aus. Im Wesentlichen laden Sie einfach Ihren HTML-Code als Anhang für das Design-Dokument hoch und drücken dann http://127.0.0.1:5984/toast/_design/toast/index.html. – karmi

6

Es gibt riesige Vorteile, CouchDB Ihr HTML zu dienen/zu erzeugen.

Zum einen sind die Seiten (die HTTP-Ressourcen sind) an die Daten oder an die Abfragen der Daten gebunden und CouchDB weiß, wann das Etag aktualisiert werden soll, wenn sich die Seite geändert hat. Das bedeutet, wenn du nginx vor CouchDB steckst und "Cache-Zeug" sagst, erhältst du all das kostenlose Caching, das du normalerweise selbst erstellen musst.

Ich würde für Nginx> Apache vor CouchDB drücken, weil Apache ist nicht so gut im Umgang mit gleichzeitigen Verbindungen und nginx + erlang (CouchDB) sind groß darin.

Sie können diese Ansichten auch in JavaScript schreiben, die gut im CouchDB-Buch http://books.couchdb.org/relax/ oder in Python mit meinem View-Server http://github.com/mikeal/couchdb-pythonviews dokumentiert sind, der noch nicht wirklich dokumentiert ist, aber ich komme bald dazu :)

ich hoffe, dass view-Server in anderen Sprachen starten die neuen Funktionen in der Ansicht Server-Protokoll implementiert und so, dass jeder Standalone-Anwendungen in CouchDB schreiben kann.

+0

Das Problem mit diesem Plan ist jedoch, dass aparently nginx Etag nicht unterstützt; nur Änderungsdatum, etc. http://markmail.org/message/4q3umqpvz5ngunw2 und http://nginx.org/pipermail/nginx/2009-April/011382.html – taxilian

+0

Ja, in letzter Zeit habe ich viel mehr Beschwerden gesehen Ich bin in letzter Zeit mehr an Lösungen interessiert, die Varnish und andere Caching-spezifische Rproxies verwenden. – mikeal

10

Es gibt eine einfache Antwort: statisches HTML als Anhänge zu CouchDB-Dokumenten speichern. So können Sie den HTML-Code direkt von der CouchDB aus bedienen.

Es gibt eine Kommandozeilen-Tool ist, dass Sie dies tun, um zu helfen genannt hat CouchApp

Das Buch Mikeal linked to auch ein Kapitel (Managing Design Documents) auf, wie CouchApp zu verwenden, um dies zu tun.