Как написать простой перехватчик ошибок?

Вот моя первая попытка перехватчика ловца на пьедестале:

(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]
     ...

1 ответ

Решение

Как объяснил Тим Эвальд, я возвращал карту ответов, когда требовался контекст.

Исправлено с

(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"}}))))
Другие вопросы по тегам