2

这是我在 Pedestal 上第一次尝试捕手拦截器:

(definterceptorfn catcher []
   (interceptor
   :error (fn [context error]
           {:status 500 
            :body (->> error .toString (hash-map :error) json/write-str)
            :headers {"Content-type" "application/json"}})))

正如我可以测试的那样,通过将(/1 0)添加到我的代码中,该函数确实被调用,但客户端得到一个状态为 200 的空响应,而不是映射中的响应。我想知道为什么会这样。

我的路线变量没有什么花哨的:

(defroutes routes
  [[["/api"
     ^:interceptors [(body-params/body-params) (catcher) bootstrap/html-body]
     ...
4

1 回答 1

2

正如Tim Ewald 解释的那样,当需要上下文时,我会返回一个响应图。

固定与

(definterceptorfn catcher []
   (interceptor
   :error (fn [context error]
           (assoc context :response
            {:status 500 
             :body (->> error .toString (hash-map :error) json/write-str)
             :headers {"Content-type" "application/json"}}))))
于 2013-07-24T14:19:46.607 回答