0

For ease of app relocation I would like to serve static files from memory instead of disk in my Scotty application. I'm currently using wai-middleware-static to serve files from disk but I see that there is a wai-app-static that could do it, but it is not in the form of a Middleware.

Can I turn the wai-app-static Application into a Middleware or is there another package I am missing?

4

2 回答 2

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

这是很糟糕的代码,所以请不要复制,但我希望它能传达这个想法?

AnApplication是一个函数:Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived. 我想说如何使用第一个参数(请求)。因此,我没有说这会 Middleware返回这个预定义的应用程序,而是构建自己的应用程序,Application它只是查看Request并决定Application应该处理它。然后它将参数传回给Application.

某处可能也有一个辅助函数可以为您执行此操作,但我不确定。

于 2017-01-19T21:51:30.957 回答
0

我找不到我要找的东西,所以我自己制作了:https ://github.com/adamse/wai-middleware-static-embedded基于wai-middleware-static.

它提供了一个功能

static :: [(FilePath, ByteString)] -> Middleware

如果它在提供的列表中,它会提供一个文件。

于 2017-01-19T18:10:54.200 回答