Web Scotty:提供静态文件时找不到文件

时间:2014-03-26 13:42:16

标签: haskell haskell-wai

这一定是非常愚蠢的事情。我刚刚开始玩scotty,无法正确地提供静态内容。

import Network.HTTP.Types
import Web.Scotty
import qualified Data.Text as T
import Data.Monoid (mconcat)
import Data.Aeson (object, (.=))
import Network.Wai.Middleware.Static

main = scotty 3000 $ do
  middleware $ staticPolicy (noDots >-> addBase "static")
  get "/" $ file "index.html"

非常简单。这是你在几本scotty教程中找到的内容。但由于某种原因它不起作用。通过' /'访问在浏览器中给我找不到的文件'事情。 如果我输入' /index.html'在浏览器 - 它的工作原理。但这是错的!我希望它可以通过' /'但不是' /index.html'。它忽略了root并直接获取html文件。如何通过' /'提供index.html服务?根?我发现没有太多的信息和一些教程指向上面的示例或类似的,但没有按预期工作。

我尝试将标题设置为' text / html'什么不...没有运气。

1 个答案:

答案 0 :(得分:6)

  

如果我输入' /index.html'在浏览器 - 它的工作原理。但这是错的!我希望它可以通过' /'但不是' /index.html'。

但这正是staticPolicy中间件的用途!每当请求与策略匹配时(在本例中为./static/中的文件),它将由staticPolicy过滤。如果您不想要这种行为,请删除中间件。

  

通过' /'访问在浏览器中给我找不到的文件'的事情。

因为middlware操作没有设置以下命令的相对路径。您需要提供file的完整路径:

main = scotty 3000 $ do
  get "/" $ file "./static/index.html"