为了便于应用程序重定位,我想在我的Scotty应用程序中从内存而不是磁盘提供静态文件。我目前正在使用wai-middleware-static
来处理来自磁盘的文件,但我发现有一个wai-app-static
可以执行此操作,但它不是Middleware
的形式。< / p>
我可以将wai-app-static
Application
变成Middleware
,还是我错过了另一个套餐?
答案 0 :(得分:1)
Middleware
的类型为Application -> Application
。所以,如果你
想要将someApplication
转换为Middleware
,这是您可以做的一种方式
它是:
staticMiddleware :: Middleware
staticMiddleware = \app -> someApplication
你丢弃一个Application
的参数并返回
你想要的应用程序,现在你有Middleware
!
可能不是很有用Middleware
。你可能想看一下
要求弄清楚如何处理它?比如,有些请求正在进行中
由这个静态服务器中间件处理,其他人正在进行
要处理你的常规服务器吗?
也许你可以这样做:
someMiddleware :: Middleware
someMiddleware = \app -> branchingApp
branchingApp :: Application
branchingApp req functionReqToRecieved =
if iWantToStaticServeThis req
then staticApp req functionReqToRecieved
else dynamicApp req functionReqToRecieved
这是一个糟糕的代码,所以请不要复制,但我希望它可以解决这个问题?
Application
是一个函数:Request -> (Response -> IO
ResponseReceived) -> IO ResponseReceived
。我想说怎么用
第一个参数(请求)。所以,而不是说这个
Middleware
返回此预定义的应用程序,我构建了我的应用程序
拥有Application
,只需查看Request
并决定
哪个Application
应该处理它。然后它传递参数
回到Application
。
在某处可能有帮助功能为您执行此操作, 我也不确定。
答案 1 :(得分:0)
我无法找到我要找的东西,所以我根据wai-middleware-static
制作了自己的https://github.com/adamse/wai-middleware-static-embedded。
它提供了一个功能
static :: [(FilePath, ByteString)] -> Middleware
如果文件位于提供的列表中,将提供文件。