这一定是非常愚蠢的事情。我刚刚开始玩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'什么不...没有运气。
答案 0 :(得分:6)
如果我输入' /index.html'在浏览器 - 它的工作原理。但这是错的!我希望它可以通过' /'但不是' /index.html'。
但这正是staticPolicy
中间件的用途!每当请求与策略匹配时(在本例中为./static/中的文件),它将由staticPolicy
过滤。如果您不想要这种行为,请删除中间件。
通过' /'访问在浏览器中给我找不到的文件'的事情。
因为middlware操作没有设置以下命令的相对路径。您需要提供file
的完整路径:
main = scotty 3000 $ do
get "/" $ file "./static/index.html"