這個問題在2010年已經提出,但我認爲今天可能會有更好的答案。 基本上我需要存儲某種對象,並在每個請求中訪問它,理想情況下,我希望能夠從請求中更改該對象(我猜MVar或IORef會爲此做)。如何使用Snap Framework在服務器端存儲某個對象?
snaplet教程似乎表明它是可能的,但它主要解釋如何使用snaplets(畢竟這是該教程的內容),並沒有真正解釋這個「App」對象如何工作甚至是存儲。我不知道如何將它應用到我的案例中,我不需要snaplets(我正在製作一個API,所以我甚至不需要海斯特)。
所以給出的默認代碼:
site :: Snap()
site = do
ifTop (writeBS "hello world") <|>
route [ ("stuff/:param", someHandler) ] <|>
dir "static" (serveDirectory ".")
如何更改爲「註冊」一些地方的對象,我可以在someHandler使用? 2010年的答案只是將其部分應用於每個處理程序,這將起作用,但Snaplet教程讓我覺得必須有更好的方法。
你可以添加一個鏈接到你指的答案嗎? –
噢,對不起:https://stackoverflow.com/questions/3903205/how-do-i-maintain-a-server-side-state-with-snap-framework – Ulrar
幾乎所有的捕捉函數都有返回類型' MonadSnap m => .. - > m X'。因此,只需創建一個實例'MonadSnap m => MonadSnap(ReaderT m)'(如果它不存在),並且您不必顯式傳遞環境。 – user2407038