如何在Happstack中分离路由掉落和索引页面访问?

时间:2013-10-03 13:24:05

标签: haskell routing monads happstack

我希望用户能够访问myserver.com并进入索引路径。

我希望在访问myserver.com/pages时显示列表页面。

但是,如果用户访问了无效的网址,例如myserver.com/invalidpath/blabla,则会覆盖indexPage路由。

我想在访问无效网址时以404 page回复。

以下是我的路线示例:

  1 routes :: ServerPart Response                                                                                                                                                                                   
  2 routes = msum                                                                                                                                                                                                   
  3     [ dirs "pages/delete" $ delete                                                                                                                                                                              
  4     , dirs "pages/edit"   $ edit                                                                                                                                                                                
  5     , dirs "pages/save"   $ save                                                                                                                                                                                
  6     , dirs "pages"        $ listPages                                                                                                                                                                           
  7     , indexPage]  

我现在想到的是,在indexPage函数中,我可以检查路径是否包含任何内容或是否为空。通过这种方式,我可以确定是否来自无效网址或索引页面访问。

有没有好办法呢?

1 个答案:

答案 0 :(得分:3)

在写这个答案时,我在hackage文件中找到了解决方案。

当路径为空时,有一个名为nullDir的函数。

使用此功能,我的示例路线如下所示:

  1 routes :: ServerPart Response                                                                                                                                                                                   
  2 routes = msum                                                                                                                                                                                                   
  3     [ dirs "pages/delete" $ delete                                                                                                                                                                              
  4     , dirs "pages/edit"   $ edit                                                                                                                                                                                
  5     , dirs "pages/save"   $ save                                                                                                                                                                                
  6     , dirs "pages"        $ listPages                                                                                                                                                                           
  7     , nullDir >> indexPage
  8     , 404Page]  

现在仅在路径为空时显示index page,并且显示所有其他连击的404 page