diff --git a/qlfile b/qlfile index 773ef1a..c040f69 100644 --- a/qlfile +++ b/qlfile @@ -7,3 +7,4 @@ git ningle-fbr https://github.com/skyizwhite/ningle-fbr.git git lack-mw https://github.com/skyizwhite/lack-mw.git git trivial-backtrace https://github.com/hraban/trivial-backtrace.git ql cl-dotenv +ql clack-errors diff --git a/qlfile.lock b/qlfile.lock index d52b632..59d04d7 100644 --- a/qlfile.lock +++ b/qlfile.lock @@ -38,3 +38,7 @@ (:class qlot/source/ql:source-ql :initargs (:%version :latest) :version "ql-2018-10-18")) +("clack-errors" . + (:class qlot/source/ql:source-ql + :initargs (:%version :latest) + :version "ql-2019-08-13")) diff --git a/src/app.lisp b/src/app.lisp index d653c10..d5fdf78 100644 --- a/src/app.lisp +++ b/src/app.lisp @@ -7,10 +7,12 @@ #:configure) (:import-from #:ningle-fbr #:set-routes) - (:import-from #:hp/middlewares/recoverer - #:*recoverer*) (:import-from #:lack-mw #:*trim-trailing-slash*) + (:import-from #:clack-errors + #:*clack-error-middleware*) + (:import-from #:hp/env + #:hp-env) (:import-from #:hp/renderer) (:export #:*app*)) (in-package #:hp/app) @@ -18,7 +20,10 @@ (defparameter *app* (let ((app (make-app))) (set-routes app :system :hp :target-dir-path "routes") - (install-middleware app *recoverer*) + (install-middleware app (lambda (app) + (funcall *clack-error-middleware* + app + :debug (string= (hp-env) "dev")))) (install-middleware app *trim-trailing-slash*) (static-path app "/img/" "static/img/") (static-path app "/style/" "static/style/") diff --git a/src/middlewares/.keep b/src/middlewares/.keep new file mode 100644 index 0000000..e69de29 diff --git a/src/middlewares/recoverer.lisp b/src/middlewares/recoverer.lisp deleted file mode 100644 index 5937889..0000000 --- a/src/middlewares/recoverer.lisp +++ /dev/null @@ -1,31 +0,0 @@ -(defpackage #:hp/middlewares/recoverer - (:use #:cl - #:hsx) - (:import-from #:trivial-backtrace - #:print-backtrace) - (:import-from #:hp/env - #:hp-env) - (:export #:*recoverer*)) -(in-package #:hp/middlewares/recoverer) - -(defun error-page (condition) - (hsx - (html :lang "ja" - (head - (title "Internal Server Error")) - (body - (main - (h1 "500 Internal Server Error") - (when (string= (hp-env) "dev") - (hsx - (pre - (code (print-backtrace condition :output nil)))))))))) - -(defparameter *recoverer* - (lambda (app) - (lambda (env) - (handler-case - (funcall app env) - (error (c) - `(500 (:content-type "text/html; charset=utf-8") - (,(hsx:render-to-string (error-page c)))))))))