我正在努力学习水晶。作为练习,我制作了一个简单的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
答案 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/