从…
http://happstack.com/docs/crashcourse/HappstackState.html
当我运行服务器时,peek计数器增加了
有关守则如下:
handlers :: ServerPart Response
handlers =
msum [ dir "peek" $ do c <- query PeekCounter
ok $ toResponse $ "peeked at the count and saw: " ++ show (unCounter c)
, do c <- update (AddCounter 1)
ok $ toResponse $ "New count is: " ++ show (unCounter c)
]但是,当我将其修改为
handlers :: ServerPart Response
handlers =
msum [ dir "peek" $ do c <- query PeekCounter
ok $ toResponse $ "peeked at the count and saw: " ++ show (unCounter c)
, do ok $ toResponse $ "Stop here."
, do c <- update (AddCounter 1)
ok $ toResponse $ "New count is: " ++ show (unCounter c)
]计数器增加了
这是有意的行为吗?即使我看了一眼,也会感觉到第二次“漏水”。
发布于 2011-05-24 17:53:44
由于浏览器每次加载页面时都请求/favicon.ico,所以计数会增加一次。由于最后一条路由是catch,所以对/favicon.ico的请求会导致增量。
最简单的解决方法是添加nullDir,以便它只对/进行增量,
handlers :: ServerPart Response
handlers =
msum [ dir "peek" $ do c <- query PeekCounter
ok $ toResponse $ "peeked at the count and saw: " ++ show (unCounter c)
, do nullDir
c <- update (AddCounter 1)
ok $ toResponse $ "New count is: " ++ show (unCounter c)
]我已经更新了教程,以避免进一步的混乱。为了确认确实是/favicon.ico请求使事情变得一团糟,我们可以显式地处理对一个图标的请求:
handlers :: ServerPart Response
handlers =
msum [ dir "peek" $ do c <- query PeekCounter
ok $ toResponse $ "peeked at the count and saw: " ++ show (unCounter c)
, dir "favicon.ico" $ notFound (toResponse "sorry, no favicon.ico")
, do c <- update (AddCounter 1)
ok $ toResponse $ "New count is: " ++ show (unCounter c)
]现在我们看到了预期的行为。
总之,幸福栈没有什么问题。浏览器向非/peek的urls发出1或2个请求,因此计数增加了一两次。这是应用程序的预期行为。但是,由于人们并不期待/favicon.ico请求,这也会导致令人惊讶的行为。因此,现在应用程序已经更改为只有两个有效的urls,/peek和/。任何其他的结果都会导致404。
谢谢你的报告!
https://stackoverflow.com/questions/6108745
复制相似问题