Question

Je commencé à travailler sur des applications Web clojure et a décidé d'utiliser une combinaison de + Anneau Compojure. Récemment, je décidé d'essayer Google Appengine avec AppEngine-magic (https://github.com/gcv/appengine-magic). Toutefois, les deux AppEngine-magie (par sa fonction de démarrage) et la fonction ne prend que de l'anneau run-jetée 1 gestionnaire en tant que paramètre, je suis mise en œuvre de plusieurs gestionnaires et voudrais savoir comment les déployer tous.

Merci à l'avance, Ze

Était-ce utile?

La solution

Il va toujours être un seul gestionnaire de niveau supérieur - après tout, même si, à un niveau conceptuel, il y a plusieurs gestionnaires, les besoins d'applications de décider lequel d'appliquer à une requête donnée en quelque sorte, de sorte que la routine ce qui rend le choix devient le gestionnaire de niveau supérieur. Donc, la réponse courte est que vous devez fournir une fonction qui examinera une demande et la transférer au gestionnaire approprié parmi les plusieurs gestionnaires à l'intérieur de votre application; cette fonction est le gestionnaire à donner à run-jetty (ou l'équivalent).

Normalement avec anneau + Compojure vous auriez des gestionnaires de base ( « interne ») destinées à la manipulation des URIs particulières et certains gestionnaires à usage de spécial (disons, pour 404s) mis en œuvre en tant que middleware. Les premiers ont tendance à définir des formes de defroutes, tandis que les seconds sont des fonctions d'ordre supérieur.

Les gestionnaires de middleware décident eux-mêmes - après avoir regardé à la demande - si elles veulent retourner une réponse immédiatement ou à déléguer aux gestionnaires, ils sont enroulés autour. Les gestionnaires « internes » base de routes sont appelés pour URIs appropriés et ont la possibilité de retourner nil pour indiquer que la demande n'a pas de sens pour eux (à quel point les gestionnaires en fonction de l'itinéraire restantes sont essayés, si tous hors de nil , la réponse finale est normalement générée par un morceau de middleware, retournant éventuellement un 404).

J'ai écrit une longue réponse au sujet Compojure ici ; il serait peut-être d'une certaine aide à obtenir le blocage des définitions de gestionnaire à base d'itinéraire de Compojure.

Autres conseils

Je ne sais pas si cela est la meilleure approche, je fini par mettre en œuvre une fonction ring.middleware qui enveloppe les autres gestionnaires autour de la principale:

(defn wrap-ohandler [f handler]
  (fn [req]
    (let [ res (f req) ]
      (if (= res nil) (handler req) res))))

(def handler-wrapped 
  (-> #'main-handler
    (wrap-ohandler #'anotherhandler )
    (wrap-stacktrace)
    (wrap-params)))

Cela fonctionne, mais est-ce une bonne approche?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top