Как написать простой перехватчик ошибок?
Вот моя первая попытка перехватчика ловца на пьедестале:
(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"}}))))