在appengine-magic 0.4.3 / Compojure 0.6.4中获取POST和GET http参数的问题

时间:2011-07-12 04:56:42

标签: google-app-engine clojure compojure appengine-magic

我在使用最新的appengine-magic / compojure版本捕获POST和GET参数时遇到了一些严重问题。即使请求对象明显包含正确的内容,参数也总是显示为空白。

我已经在互联网上看到了一些关于Compojure协议更改的内容,你必须手动放入包装器。我试过这个(使用handler / api包装器来避免破坏GAE的处理程序/站点包装器中的东西)但它仍然不起作用。

我在这里做错了什么?

我的project.clj文件:

(defproject pitch-filter "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.2.0"]
         [org.clojure/clojure-contrib "1.2.0"]
         [compojure "0.6.4"]
         [hiccup "0.3.6"]
         [jtidy "4aug2000r7-dev"]
         [commons-lang "2.5"]]
  :dev-dependencies [[appengine-magic "0.4.2"]
             [clj-http "0.1.1"]])

我的core.clj文件:

(ns pitch-filter.core
  (:use compojure.core
    [appengine-magic.multipart-params :only [wrap-multipart-params]]
    [hiccup.middleware :only (wrap-base-url)])
  (:require [pitch-filter.fetch :as fetch]
        [compojure.route :as route]
        [compojure.handler :as handler]
        [appengine-magic.core :as ae]
        [appengine-magic.services.url-fetch :as url]


(defroutes pitch-filter-app-routes
  (GET "/" [] "Main Page")
  (GET "/form" []
    (str "<form method='post' action='/post'>"
         "<input type='text' name='test'>"
         "<input type='submit'>"
         "</form>"))
  (POST "/post" {params :params}
    (pr-str params))
  (route/not-found "Page not found"))


(def pitch-filter-app-handler
     (-> pitch-filter-app-routes
     (handler/api)
     (wrap-base-url)
     ))

(ae/def-appengine-app pitch-filter-app #'pitch-filter-app-handler)

2 个答案:

答案 0 :(得分:0)

事实证明,只有在使用Google App Engine 1.5.1 dev_appserver.sh时才会出现此问题。它适用于1.4.3。如果其他人找到更好的解决方案,我会保持开放状态。

答案 1 :(得分:0)

看起来dev_appserver.sh看起来像是被App Engine 1.5.1破坏了。可惜,但你并不应该将它与appengine-magic一起使用。您应该使用交互式REPL工具(即ae / serve)。他们工作正常。

我更新了你在appengine-magic项目页面上打开的门票(https://github.com/gcv/appengine-magic/issues/28)。

-gcv