使用 Scotty RoutePattern 匹配嵌套子目录

Match nested subdirectories with a Scotty RoutePattern

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

....

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

Scotty 在默认路由模式(称为 capture)之上还有其他几种路由模式。这些可以在 the documentation.

中找到

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

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

对于您的用例,这将是捕获整个路径、拆分“/”并使用 </> 折叠结果列表的问题。