在环形应用程序中捕获异常的惯用方法

mur*_*a52 9 clojure ring

在环形应用程序中处理异常的惯用方法是什么?我想捕获异常并返回500页.我怎么做 ?

我在下面的代码中使用小胡子,但它不起作用 -

(def my-app (try
              (app
               (wrap-logger true)
               wrap-keyword-params
               wrap-params
               wrap-file-info
               (wrap-file "resources/public/")
               [""]  (index-route @prev-h nil)
               ["getContent"] (fetch-url)
               ["about"] "We are freaking cool man !!"
               [&] (-> "Nothing was found" response (status 404) constantly))
              (catch Exception e
                (app
                 [&] (-> "This is an error" response (status 500) constantly)))
Run Code Online (Sandbox Code Playgroud)

Joo*_*aat 27

您不希望将整个应用程序包装在try-catch块中,您希望单独包装每个请求的处理.制作一个可以做到这一点的中间件非常容易.就像是:

(defn wrap-exception [handler]
  (fn [request]
    (try (handler request)
      (catch Exception e
         {:status 500
          :body "Exception caught"}))))
Run Code Online (Sandbox Code Playgroud)

  • 您的示例仅捕获被抛出的异常*实例化app*.当应用程序绑定到"my-app"时,try-catch表达式已经完成. (4认同)