Je ne parviens pas à accéder aux paramètres de formulaire à partir d'une requête POST. J'ai essayé toutes les combinaisons d'options de middleware et de configuration que j'ai vues dans les docs, sur SO, etc. (y compris les options obsolètes compojure/handler) et je suis toujours incapable de voir les paramètres. Je suis sûr qu'il me manque quelque chose de très évident, alors toutes les suggestions (peu importe la gravité) seraient grandement appréciées.Impossible d'accéder aux paramètres de formulaire lors de l'utilisation de défracements imbriqués dans Compojure
Voici ma dernière tentative, dans laquelle j'essaie d'utiliser le middleware par défaut de site et de désactiver la protection anti-contrefaçon/CSRF fournie par défaut. (Je sais que c'est une mauvaise idée.) Cependant, lorsque j'essaie d'afficher la page en question dans un navigateur Web, le navigateur essaie de télécharger la page, comme s'il s'agissait d'un fichier qu'il n'était pas capable de rendre. (Fait intéressant, la page est affichée comme prévu lors de l'utilisation Curl.)
est ici la dernière tentative:
(defroutes config-routes*
(POST "/config" request post-config-handler))
(def config-routes
(-> #'config-routes*
(basic-authentication/wrap-basic-authentication authenticated?)
(middleware-defaults/wrap-defaults (assoc middleware-defaults/site-defaults :security {:anti-forgery false}))))
tentative précédente:
(def config-routes
(-> #'config-routes*
(basic-authentication/wrap-basic-authentication authenticated?)
middleware-params/wrap-params))
MISE À JOUR: Les paramètres semblent être avalés par l'extérieur defroutes
:
(defroutes app-routes
(ANY "*" [] api-routes)
(ANY "*" [] config-routes)
(route/not-found "Not Found"))
Donc, ma question devient maintenant: Comment puis-je thread les paramètres à travers le defroutes
imbriqué?
Ma résolution temporaire est basée sur la solution this, mais Steffen Frank's est beaucoup plus simple. Je vais essayer cela et le suivi.
MISE À JOUR 2:
En essayant de mettre en œuvre les suggestions fournies par les deux réponses actuelles, je suis en cours d'exécution dans un nouveau numéro: les matches de la route sont overeager. par exemple. étant donné ce qui suit, les POST vers/quelque chose échouent avec une réponse 401 en raison du middleware d'authentification wrap-basic-authentication dans config-routes.
(defroutes api-routes*
(POST "/something" request post-somethings-handler))
(def api-routes
(-> #'api-routes*
(middleware-defaults/wrap-defaults middleware-defaults/api-defaults)
middleware-json/wrap-json-params
middleware-json/wrap-json-response))
(defroutes config-routes*
(GET "/config" request get-config-handler)
(POST "/config" request post-config-handler))
(def config-routes
(-> #'config-routes*
(basic-authentication/wrap-basic-authentication authenticated?)
middleware-params/wrap-params))
(defroutes app-routes
config-routes
api-routes
(route/not-found "Not Found"))
(def app app-routes)
Merci, c'est une solution très propre. J'ai fini par utiliser [this] (http: // stackoverflow.com/a/28017586/382982), mais nous allons essayer. – pdoherty926
Cela fonctionne ... en quelque sorte. Si 'api-routes' arrive en premier dans la liste, il correspond/avale la demande et je suis de retour à l'endroit où j'ai commencé. Aucun de mes défragements imbriqués n'a de gestionnaire 'non-trouvé ', donc je suis confus quant à la raison pour laquelle cela se produit. – pdoherty926