Доступ к строке запроса в приложении Spiffy

Здесь не нужно спрашивать об этом, но благодаря плохой документации, как мне получить доступ к строке запроса в приложении Spiffy (egg)? Спасибо!

(use intarweb spiffy sxml-serializer) 

(tcp-buffer-size 2048)
(server-port 80)

(handle-not-found (lambda (path)    
    ; (print (request-uri (current-request)))
    ; (print (request-method (current-request)))
    ; (print (current-pathinfo (current-request)))
    ; (print (current-file))
    ; (print (remote-address))
    (send-response 
        body: (serialize-sxml
            `(div (@ (class "page"))
                (h1 ,path))
            method: 'html))))

(start-server)

1 ответ

Я не совсем уверен, почему вы хотите получить доступ к строке запроса, но объекты URI в Spiffy происходят из объекта запроса, как вы правильно определили. Объект запроса от intarweb, который вставляет общий URI-объект в request-uri приписывать.

Вы можете получить доступ к составным компонентам, используя аксессоры uri-common, как описано в справочнике по URI-common egg

Строка запроса разбирается в список для вашего удобства и доступна через (uri-query (request-uri (current-request))),

К "исходной" строке запроса можно получить доступ немного по-другому: универсальное яйцо uri - это удобная оболочка для более низкого уровня универсального яйца, доступ к которому можно получить, вызвав (uri->uri-generic URI) где URI (request-uri (current-request)), как прежде.

Затем вы можете получить доступ к строке запроса через uri-query процедура из этого яйца Вот простой пример, который вы можете использовать в REPL:

#;1> (use uri-common (prefix uri-generic generic:))
#;2> (uri-reference "http://foo?x=y")
#<URI-common: scheme=http port=#f host="foo" path=() query=((x . "y")) fragment=#f>
#;3> (uri-query #2)
((x . "y"))
#;4> (uri->uri-generic #2)
#<<URI>>
#;5> (generic:uri-query #4)
"x=y"

То, что я сделал здесь, это префикс всех процедур из uri-generic с "generic:". Это необходимо, потому что uri-common "скрывает" все процедуры, определенные uri-generic.

Другие вопросы по тегам