2013-07-22 2 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"}}))) 

Как я могу проверить, добавив (/ 1 0) в мой код, то функция не дозвонилась, но клиент получает пустой ответ со статусом 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"}}))))