将嵌套子目录与Scotty RoutePattern匹配

时间:2015-04-09 07:13:39

标签: haskell scotty

我正在使用我的Scotty网络服务器提供一些静态文件。它们也可以位于子目录中。我目前的方法如下:

get "/:fileName" $ do
    fileName <- param "fileName"
    file $ pathToStaticFiles </> fileName

get "/:dirName/:fileName" $ do
    dirName <- param "dirName"
    fileName <- param "fileName"
    file $ pathToStaticFiles </> dirName </> fileName

get "/:dirName1/:dirName2/:fileName" $ do
    dirName1 <- param "dirName1"
    dirName2 <- param "dirName2"
    fileName <- param "fileName"
    file $ pathToStaticFiles </> dirName1 </> dirName2 </> fileName

....

是否有可能仅使用一个模式匹配具有不同目录嵌套深度的路径?

1 个答案:

答案 0 :(得分:1)

Scotty在默认路由模式之上有几个其他路由模式(称为capture)。这些可以在the documentation中找到。

regex似乎正是您想要的。以下是文档中的示例:

get (regex "^/f(.*)r$") $ do
   path <- param "0"
   cap <- param "1"
   text $ mconcat ["Path: ", path, "\nCapture: ", cap]

对于您的用例,它应该是捕获整个路径,拆分“/”并使用</>折叠结果列表。