从REPL访问Hunchentoot请求对象以进行调试

BnM*_*cGn 8 lisp debugging common-lisp hunchentoot

我发现在编写Hunchentoot时,增量开发往往会中断.

例如,我可能会编写一个由几个函数组成的网页.如果其中一个内部函数包含调用 - 比如 - hunchentoot:post-parameters*那么我就不能轻易地在REPL中测试该函数.它会出错,因为*request*不存在,除非Web客户端调用该页面.

如果存在一些函数或其他源,那么我可以测试我的函数:

>(let* ((*request* (get-previous-request-from-somewhere))
       (*session* (slot-value *request* 'hunchentoot:session)))
    (my-function <whatever params>))
Run Code Online (Sandbox Code Playgroud)

它或类似的东西存在吗?我是否忽略了更好的调试方法?

BnM*_*cGn 7

我的临时解决方案看起来像这样:

(defparameter *save-last-request* t)
(defvar *last-request* nil)

(defun store-request ()
  (when *save-last-request*
    (setf *last-request* *request*)))

(defmacro with-last-request (&body body)
  `(let* ((*request* *last-request*)
      (*session* (slot-value *request* 'hunchentoot:session)))
    ,@body))
Run Code Online (Sandbox Code Playgroud)

它适用于每个处理程序需要调用的警告store-request.