我正在使用我的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
....
是否有可能仅使用一个模式匹配具有不同目录嵌套深度的路径?
答案 0 :(得分:1)
Scotty在默认路由模式之上有几个其他路由模式(称为capture
)。这些可以在the documentation中找到。
regex
似乎正是您想要的。以下是文档中的示例:
get (regex "^/f(.*)r$") $ do
path <- param "0"
cap <- param "1"
text $ mconcat ["Path: ", path, "\nCapture: ", cap]
对于您的用例,它应该是捕获整个路径,拆分“/”并使用</>
折叠结果列表。