我希望用户能够访问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
。