aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Okay <okay@toyful.space>2022-02-08 15:41:54 -0600
committerColin Okay <okay@toyful.space>2022-02-08 15:41:54 -0600
commite76a59a400f7df03636a6af707b159b1bd7eaaa4 (patch)
tree049a07a680e7b21cad6e31fb075aec944fb00e7e
parent2742fd7bc38999287b9ee7de9f3b94f8d1ac5cc0 (diff)
better custom error handling
-rw-r--r--lazybones-hunchentoot.lisp25
1 files changed, 18 insertions, 7 deletions
diff --git a/lazybones-hunchentoot.lisp b/lazybones-hunchentoot.lisp
index 9c2d108..e87fbd7 100644
--- a/lazybones-hunchentoot.lisp
+++ b/lazybones-hunchentoot.lisp
@@ -30,12 +30,20 @@
:address "127.0.0.1"))
(defmethod h:acceptor-dispatch-request ((%server lazybones-acceptor) request)
- (loop for app in (acceptor-apps %server)
- for (endpoint . args) = (lzb::find-endpoint app request)
- when endpoint
- return (lzb::run-endpoint endpoint args request h:*reply* app)
- ;; if no endpoint was found, call next method.
- finally (call-next-method)))
+ (handler-case
+ (loop for app in (acceptor-apps %server)
+ for (endpoint . args) = (lzb::find-endpoint app request)
+ when endpoint
+ return (lzb::run-endpoint endpoint args request h:*reply* app)
+ ;; if no endpoint was found, call next method.
+ finally (let ((lzb:*request* request)
+ (lzb:*response* h:*reply*))
+ (return (lzb:http-err 404))))
+ (error (e)
+ (declare (ignorable e))
+ (let ((lzb:*request* request)
+ (lzb:*response* h:*reply*))
+ (lzb:http-err 500)))))
;;; SERVER FUNCTIONS
@@ -43,7 +51,10 @@
"Creates an opaque server on port PORT, and returns it. Servers are
backend specific, but each may be passed in to INSTALL-APP,
UNINSTALL-APP, START-SERVER, and STOP-SERVER."
- (make-instance 'lazybones-acceptor :port port :address address))
+ (let ((server (make-instance 'lazybones-acceptor :port port :address address)))
+ (set-canned-response server 404 "Not Found" "text/plain")
+ (set-canned-response server 500 "Server Error" "text/plain")
+ server))
(defun start-server (server)
(h:start server))