如何提供文件?

时间:2017-03-18 18:29:24

标签: crystal-lang

我正在努力学习水晶。作为练习,我制作了一个简单的Web应用程序,它需要提供一个文件(称为index.html)。

不幸的是,我只能弄清楚如何提供文件所在的目录。如果你加载http://localhost,这就是你的目标:

Directory listing for /
    index.html
    style.css

但我当然希望看到index.html的内容。

我的代码如下:

require "http/server"

port = 3000

server = HTTP::Server.new("127.0.0.1", port, [
  HTTP::ErrorHandler.new,
  HTTP::LogHandler.new,
  HTTP::CompressHandler.new,
  HTTP::StaticFileHandler.new("./assets"),
])

puts "listening on http://localhost:#{port}"

server.listen

2 个答案:

答案 0 :(得分:1)

Crystal StaticFileHandler目前不在包含它的目录中提供index.html。相反,它会提供您发现的目录列表。不幸的是,没有办法让StaticFileHandler做你想做的事。

但是,如果您只需要提供顶级index.html,则可以调整代码以便在处理程序中提供文件,如下所示:

require "http/server"

port = 3000

server = HTTP::Server.new("127.0.0.1", port, [
  HTTP::ErrorHandler.new,
  HTTP::LogHandler.new,
  HTTP::CompressHandler.new,
  HTTP::StaticFileHandler.new("./assets"),
]) do |context|
  if context.request.path = "/" && context.request.method == "GET"
    context.response.content_type = "text/html"

    File.open("./assets/index.html") do |file|
      IO.copy(file, context.response)
    end
  end
end

puts "listening on http://localhost:#{port}"

server.listen

答案 1 :(得分:0)

您可以为此使用shivneri框架。 Shivneri具有易于配置的内置文件服务器,并提供index.html

如何配置

mpl_connect

有关更多信息,请阅读文档-https://shivneriforcrystal.com/tutorial/file-server/