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]
     ...
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 に答える