首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HappStack中的

HappStack中的
EN

Stack Overflow用户
提问于 2011-05-24 10:01:33
回答 1查看 646关注 0票数 1

从…

http://happstack.com/docs/crashcourse/HappstackState.html

当我运行服务器时,peek计数器增加了

  • 1当我看
  • 2时,不看

有关守则如下:

代码语言:javascript
复制
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)
         ]

但是,当我将其修改为

代码语言:javascript
复制
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)
         ]

计数器增加了

  • 0当我看
  • 1时,不看

这是有意的行为吗?即使我看了一眼,也会感觉到第二次“漏水”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-24 17:53:44

由于浏览器每次加载页面时都请求/favicon.ico,所以计数会增加一次。由于最后一条路由是catch,所以对/favicon.ico的请求会导致增量。

最简单的解决方法是添加nullDir,以便它只对/进行增量,

代码语言:javascript
复制
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请求使事情变得一团糟,我们可以显式地处理对一个图标的请求:

代码语言:javascript
复制
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。

谢谢你的报告!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6108745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档