1

我正在使用我的 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

....

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

4

1 回答 1

2

captureScotty 在默认的路由模式(称为)之上还有其他几种路由模式。这些可以在文档中找到。

regex似乎正是你想要的。这是文档中的示例:

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

对于您的用例,只需捕获整个路径,在“/”上拆分并将结果列表折叠为</>.

于 2015-04-09T09:06:30.377 回答