【问题标题】:Clojure wrap-json-response returning 404Clojure wrap-json-response 返回 404
【发布时间】:2014-09-21 04:30:59
【问题描述】:

我正在学习使用 Closure/Compojure,但在构建小型 Web 应用程序时遇到了问题。

我在 mywebapp/routes.clj 上定义了以下路由

(defroutes app-routes
  (GET "/" [] (index-page))
  (GET "/about" [] (about-page))
  (GET "/bluebutton" [] (bluebutton-page))
  (GET "/bluebutton/patient" [] (patient-handler))
  (route/resources "/")
  (route/not-found "No page"))

还有一个不工作的 /bluebutton/patient,我希望得到一个带有以下代码的 JSON 响应:

(use '[ring.middleware.json :only [wrap-json-response]]
     '[ring.util.response :only [response]])

(defn patient-handler []
  (println "patient-handler")
  (wrap-json-response (response {:body {:foo "bar"}})))

由于某种原因,我在浏览器上收到 404 响应,但我正在检查 REPL 输出,表明我正在执行患者处理程序的代码,你们知道我是否遗漏了什么?

提前致谢!对不起我奇怪的英语!

【问题讨论】:

    标签: json clojure compojure


    【解决方案1】:

    wrap-json-response 将一个函数作为它的参数并返回一个新函数,该函数在调用时将被 json 包装。像这样:

    (defn patient-handler []
      (println "patient-handler")
      (middleware/wrap-json-response (fn [_] (response {:body {:foo "bar"}}))))
    

    虽然更普通的应用程序会将其拆分为它自己的函数(或整个命名空间):

    (ns hello-web.handler
      (:require [compojure.core :refer :all]
                [compojure.handler :as handler]
                [ring.middleware.json :as middleware]
                [compojure.route :as route]
                [ring.util.response :refer [response]]))
    
    (defroutes app-routes
      (GET "/" [] "Hello World")
      (route/resources "/")
      (GET "/bluebutton/patient" [] (patient-handler))
      (route/not-found "Not Found"))
    
    (def app
      (handler/site app-routes))
    
    (defn create-json-response [request]
      (response {:body {:foo "bar"}}))
    
    (defn patient-handler []
      (println "patient-handler")
      (middleware/wrap-json-response create-json-response))
    

    【讨论】:

    • 感谢您的回复,我会尝试这种方法,现在我正在使用 [clojure.data.json :as json] 并且在我的处理程序结束时返回类似this: (json/write-str {:success true :message "Completed succesfully"})
    猜你喜欢
    • 2013-01-31
    • 2021-11-26
    • 2012-10-20
    • 1970-01-01
    • 2018-05-31
    • 2014-03-09
    • 2019-03-17
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多