我试图用水晶写一个简单的网站。我有一个名为assets
的文件夹,其中包含index.html
,style.css
和一些图片。
当我尝试加载网站时,我可以访问index.html
,但没有其他工作正常。 Firefox报告了style.css的错误,并说图像已损坏。
Server.cr
require "http/server"
class LieServer
def initialize(p : Int)
port = p
@server = HTTP::Server.new("127.0.0.1", port, [
HTTP::ErrorHandler.new,
HTTP::LogHandler.new,
HTTP::CompressHandler.new,
]) do |context|
resp = context.response
if context.request.path == "/" && context.request.method == "GET"
resp.content_type = "text/html"
File.open("./assets/index.html") do |file|
IO.copy(file, resp)
end
elsif (context.request.path == "/assets/sad.jpg" || context.request.path == "/assets/fireworks.jpg")
resp.content_type = "image"
elsif context.request.path == "/assets/style.css"
resp.content_type = "text/css"
else
resp.respond_with_error(message = "/", code = 404)
end
end
end
def start
puts "listening on http://localhost:#{@server.port}"
@server.listen
end
end
火狐:
答案 0 :(得分:0)
你永远不会实际复制css文件作为回应。只需设置内容类型。尝试将css elsif块更改为:
elsif context.request.path == "/assets/style.css"
resp.content_type = "text/css"
File.open("./assets/style.css") do |file|
IO.copy(file, resp)
end
else
.
.
.
顺便说一句,您的图片遇到了同样的问题。
答案 1 :(得分:0)
您仅提供index.html,对于其他文件,您只是在更改内容类型。
您可以为此使用Shivneri框架。 Shivneri提供内置文件服务器。
Shivneri.folders = [{
path: "/",
folder: File.join(Dir.current, "assets"),
}]
有关更多信息,请查看文件服务器文档-https://shivneriforcrystal.com/tutorial/file-server/