2009-12-15 8 views
7

J'essaie d'utiliser CouchDB avec une architecture REST HTML/autonome. Autrement dit, aucun autre serveur d'application autre que CouchDB et le style ajax javascript appelant CouchDB.Utilisation de CouchDB pour diffuser le code HTML

Il semble que le script croisé pose problème. J'utilisais Cloudkit/Tokyo Cabinet avant et il me semble que la fonction de rappel nécessaire était en train de se ficher dans l'URL. Maintenant, j'essaie CouchDB et obtenir le même problème.

Voici mes questions:

1) Ces problèmes sont parce que le magasin REST/JSON comme CouchDB ou CloudKit est en cours d'exécution sur un port différent de ma page web? Ils sont tous les deux exécutés localement et appelés depuis "localhost".

2) Devrais-je laisser CouchDB héberger ma page et servir le HTML?

3) Comment faire? La documentation na pas l'air si clair ...

Merci, Alex

Répondre

0

Je ne peux pas empêcher de penser que vous avez besoin d'une couche entre la couche de présentation (HTML) et le modèle (CouchDB).

De cette façon, vous pouvez négocier des demandes, fournir des installations et des fonctionnalités supplémentaires. Pour l'instant, vous semblez rendre les objets persistants directement dans la couche de présentation, et vous n'aurez pas la possibilité de modifier ou d'étendre le comportement de votre système à l'avenir. L'adoption d'une architecture model-view-controller isolera votre modèle de la couche de présentation et vous donnera une certaine flexibilité en avant.

(je vous avoue que je ne peux pas donner des conseils sur vos questions cross-site scripting)

+2

Brian- qui est en fait le point de cette architecture. Je pense qu'avec Ajax, la couche contrôleur commence à déplacer le côté client. Le contrôleur (et le travail de mise à jour de la vue) se fait en javascript sur la page. Donc, il fait des appels REST/JSON au modèle. Terminé complètement, il doit y avoir une pièce d'autorisation/de sécurité du côté du modèle, mais je fais du prototypage maintenant. Quelqu'un sait-il sur le code HTML dans CouchDB pience? – alxross

3

Je pense que d'une façon est répercutant mod_proxy Apache. Il transmet la requête d'Apache à Couchdb afin de résoudre le problème de script croisé.

# Configuration file for proxy 
ProxyVia ON 

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

Aha- merci. C'est une bonne idée pour aider avec le script croisé. Est-ce que vous (ou quelqu'un d'autre) savez comment obtenir CouchDB pour servir le HTML. C'est censé être capable de faire ça et j'ai vu des références pour le faire "dans le doc de conception" mais je n'ai pas pu voir exactement comment ... – alxross

+0

Vous pouvez juste jeter un oeil à "couchapps" dans le ouvrir. Par exemple. http://github.com/jchris/toast/ est très petit et compréhensible. Configurer couchapp et exécuter un 'couchapp push .'. Essentiellement, il vous suffit de télécharger votre code HTML en pièce jointe pour le document de conception, puis appuyez sur http://127.0.0.1:5984/toast/_design/toast/index.html. – karmi

6

Il y a d'énormes avantages à ce que CouchDB serve/génère votre code HTML. D'une part, les pages (qui sont des ressources HTTP) sont liées aux données ou aux requêtes sur les données et CouchDB sait quand mettre à jour l'etag lorsque la page a changé. Cela signifie que si vous collez nginx devant CouchDB et que vous dites "cache stuff", vous obtenez toute la mise en cache gratuite dont vous auriez normalement besoin pour vous construire.

Je pousserais pour nginx> apache devant CouchDB parce qu'Apache n'est pas très bien pour gérer les connexions simultanées et nginx + erlang (CouchDB) sont excellents.

Aussi, vous pouvez écrire ces vues en JavaScript qui sont bien documentées dans le livre CouchDB http://books.couchdb.org/relax/ ou en Python en utilisant mon serveur de vue http://github.com/mikeal/couchdb-pythonviews qui n'est pas vraiment documenté du tout mais j'y viendrai bientôt :)

J'espère que les serveurs de vue dans d'autres langues commenceront également à implémenter les nouvelles fonctionnalités dans le protocole du serveur de vue afin que n'importe qui puisse écrire des applications autonomes dans CouchDB.

+0

Le problème avec ce plan, cependant, est que nginx ne supporte pas Etag; seulement la date de modification, etc. http://markmail.org/message/4q3umqpvz5ngunw2 et http://nginx.org/pipermail/nginx/2009-April/011382.html – taxilian

+0

ouais, récemment j'ai vu beaucoup plus de plaintes dans général à propos de nginx comme une rproxy donc j'ai été plus intéressé récemment dans les solutions qui utilisent Varnish et d'autres rproxies spécifiques de mise en cache. – mikeal

10

Il existe une réponse simple: stocker du code HTML statique en tant que pièces jointes à des documents CouchDB. De cette façon, vous pouvez servir le HTML directement depuis le CouchDB.

Il est un outil de ligne de commande pour vous aider à faire cela, appelé CouchApp

Le livre Mikeal linked to a également un chapitre (Gestion des documents de conception) sur la façon d'utiliser couchapp pour ce faire.

7

3) vous pouvez utiliser CouchDB shows pour générer HTML (ou tout autre type de contenu)