2
我寫了一個clojure webapp,看起來非常像 示例webapp as the friend exmaple。我有 使用ring-mock
寫一點測試來測試驗證 是否正常工作。寫這個測試我發現了一些我不明白的行爲。Compojure和Friend在這個例子中,狀態是
以下面的代碼爲例。
(let [route "/login"
login-post (body (request :post route)
{"username" "Username" "password" "Password"})]
(println (secured-app login-post))
(println (secured-app login-post)))
第一println
返回正確的結果:
{:status 303,
:headers
{"Set-Cookie"
("ring-session=ENCRYPTED-STUFF;Path=/"),
"Location" "/"},
:body ""}
但是第二個返回一個登錄錯誤:
{:status 302,
:headers
{"Location" "http://localhost/login?&login_failed=Y&username="},
:body ""}
某處在這個代碼存在從被「發送」狀態第一個 請求被處理到第二個請求(secured-app login-post)
,但我沒有看到它。
當我如運行此聲明:
(println (secured-app(body (request :post "/login")
{"username" "Username" "password" "Password"})))
在REPL多次
,我總是第一個正確的結果。
這種行爲來自哪裏,在這個例子中,國家在哪裏?
我做了一個小的庫來存儲/重新創建請求,請求的主體是一個流所期望的環:https://github.com/noisesmith/groundhog它可以作爲一個環處理程序添加,以捕獲請求當他們進來時 – noisesmith