无法加载样式表

时间:2017-03-20 20:49:08

标签: http crystal-lang

我试图用水晶写一个简单的网站。我有一个名为assets的文件夹,其中包含index.htmlstyle.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

火狐:

enter image description here

2 个答案:

答案 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/