7

这一定是一件非常愚蠢的事情。我刚开始玩 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”访问。它忽略根目录并直接获取 html 文件。如何通过“/”根服务 index.html?周围没有太多信息,我发现一些教程指向上述示例或类似示例,但无法按预期工作。

我尝试将标题设置为“text/html”,什么不是……不走运。

4

1 回答 1

6

如果我在浏览器中输入“/index.html” - 它可以工作。但这是错误的!我希望它可以通过“/”而不是“/index.html”访问。

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

在浏览器中通过“/”访问会给我“找不到文件”的东西。

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

main = scotty 3000 $ do
  get "/" $ file "./static/index.html"
于 2014-03-26T14:51:50.207 回答