使用 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]
对于您的用例,这将是捕获整个路径、拆分“/”并使用 </>
折叠结果列表的问题。
我正在使用我的 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]
对于您的用例,这将是捕获整个路径、拆分“/”并使用 </>
折叠结果列表的问题。