2013-07-22 406 views
2

這裏有一個捕手攔截在底座上我第一次嘗試:如何編寫一個簡單的錯誤攔截器?

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

正如我可以測試,通過增加(/ 10)我的代碼,該函數不被調用,但客戶端得到一個空狀態爲200的響應,而不是地圖中的響應。我想知道爲什麼是這樣。

沒有什麼花哨的在我的路線變量:

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

回答

2

由於Tim Ewald explained,需要一個背景下,當我返回響應地圖。

修正了

(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"}}))))