我正在尝试创建一个端点,该端点将使用 Caveman2 发送状态代码。
(defroute "/books/" ()
(render-json "Hello"))
我找到了函数throw-code
这使我能够发送状态代码,但也不允许我发送响应正文。看起来它是为了处理错误而设计的。
(import 'caveman2:throw-code)
(defroute "/books/" ()
(throw-code 403)
;; This will not respond with "Hello"
(render-json "Hello"))
穴居人2 github page讨论使用特定状态代码进行响应:
Set HTTP headers or HTTP status
HTTP 请求期间有几个可用的特殊变量。 request和response代表请求和响应。如果您熟悉 Clack,这些是 Clack 子类的实例 Clack.Request 和 Clack.Response。
block 引用>(use-package :caveman2) ;; Get a value of Referer header. (http-referer *request*) ;; Set Content-Type header. (setf (getf (response-headers *response*) :content-type) "application/json") ;; Set HTTP status. (setf (status *response*) 304)
但是,我不知道如何实例化这些对象或如何导入它们。我找不到有效的示例,当我将其按原样放入代码中时,它将无法编译。
我怎样才能做到这一点?
最佳答案
您不必实例化它们。这些是已经绑定(bind)在 defroute 函数上下文中的特殊变量。所以,你可以这样做:
(defroute "/books/" ()
(setf (caveman2:response-status caveman2:*response*) 403)
(render-json "Hello"))
或者您可以在包定义中导入 caveman2:*response*
和 caveman2:response-status
,并像其他 caveman2
一样使用它诸如 defroute
或 render-json
之类的符号:
(defroute "/books/" ()
(setf (response-status *response*) 403)
(render-json "Hello"))
关于common-lisp - 如何使用 Caveman2 设置响应状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73436058/