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



我希望用户能够访问myserver.com并来到索引路由。

我想在他们访问myserver.com/pages时显示列表页面。

但是,如果用户访问无效的 URL(例如 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函数中,我可以检查路径是否包含任何内容或是否为空。这样,我可以确定失败是来自无效的 url 还是索引页面访问。

有没有好方法可以做到这一点?

在写这个答案时,我在关于黑客的文档中找到了解决方案。

有一个名为 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

相关内容

  • 没有找到相关文章

最新更新