Diese Frage wurde bereits 2010 gestellt, aber ich denke, dass es heute eine bessere Antwort geben könnte. Grundsätzlich muss ich eine Art von Objekt speichern und auf jede Anfrage zugreifen, idealerweise möchte ich in der Lage sein, das Objekt innerhalb einer Anfrage zu ändern (ich denke, ein MVar oder IORef wird dafür tun). Das Snaplet-Tutorial scheint zu zeigen, dass es möglich ist, aber es erklärt hauptsächlich, wie Snaplets zu verwenden sind (das ist, wofür das Tutorial eigentlich ist), und erklärt nicht wirklich, wie dieses "App" -Objekt funktioniert oder sogar gespeichert wird . Ich habe keine Ahnung, wie ich das auf meinen Fall anwenden soll, wo ich keine Snaplets brauche (ich mache eine API, also brauche ich nicht einmal Heist).Wie speichere ich ein Objekt serverseitig mit Snap Framework?
So den Standardcode gegeben:
site :: Snap()
site = do
ifTop (writeBS "hello world") <|>
route [ ("stuff/:param", someHandler) ] <|>
dir "static" (serveDirectory ".")
Wie ändere ich das „Register“ ein Objekt irgendwo, dass ich in someHandler verwenden könnte? Die Antwort von 2010 ist nur, es teilweise auf jeden Handler anzuwenden, was funktionieren würde, aber das Snaplet-Tutorial lässt mich glauben, dass es einen besseren Weg geben muss.
Können Sie einen Link zu der Antwort hinzufügen, auf die Sie sich beziehen? –
Oh ja, sorry: https://stackoverflow.com/questions/3903205/how-do-i-maintain-a-server-side-state-with-snap-framework – Ulrar
Fast alle der Fangfunktionen Rückgabetyp haben ' MonadSnap m => .. -> mX'. Also mache einfach eine Instanz 'MonadSnap m => MonadSnap (ReaderT m)' (falls es noch nicht existiert) und du musst die Umgebung nicht explizit weitergeben. – user2407038