【发布时间】:2019-12-31 21:23:40
【问题描述】:
我正在尝试在 Lucerne 构建一个简单的 rest api,但如果 json 格式错误,clack:call 方法会失败。所以,我扩展了 bass-app 类并添加了一个 around 方法:
(defclass tracker-app (base-app) ()
(:documentation "An extension of lucerne's base app to control behavior"))
(defmethod clack:call :around ((app tracker-app) env)
(handler-case (call-next-method)
(fast-http:cb-message-complete (e)
(vom:error "could not build message body: ~a" e)
(respond nil :status 400))
(:no-error (res) res)))
(defapp server :class 'tracker-app)
(start server :server woo)
但是解析错误继续导致服务器崩溃。
我对 clos 了解不多,所以我担心我误解了如何在这种情况下捕获错误。
编辑:添加开始信息
编辑:添加堆栈跟踪
【问题讨论】:
-
我认为需要更多细节。你如何构建你的应用程序(哪些中间件),你的处理程序是什么?
-
谢谢,我已经添加了这些信息。为了简单起见,我现在没有使用中间件(可以用来解决这个问题)并且服务器很糟糕。问题发生在路线调度之前,所以我将其排除在外。
-
我不知道
clack:call在哪里发挥作用,我懒得尝试。据我记得,woo 使用异步请求处理。因此,您的错误可能发生在不同的线程中。您是否尝试过其他服务器? -
我检查了 Lucernes 基础应用程序和我的扩展和 clack:call 的错误堆栈
-
希望对您有所帮助。我看到两个 clack 调用,所以我真的很困惑为什么我的错误处理不起作用
标签: json rest parsing common-lisp clos