2016-12-29 2 views
2

저는 언어에 익숙하지 않으며 매우 간단한 HTTP 서버에서 해킹을 시작하고 싶습니다. 현재 코드는 다음과 같습니다.Crystal-lang serve index.html

require "http/server" 

port = 8080 
host = "127.0.0.1" 
mime = "text/html" 

server = HTTP::Server.new(host, port, [ 
    HTTP::ErrorHandler.new, 
    HTTP::LogHandler.new, 
    HTTP::StaticFileHandler.new("./public"), 
    ]) do |context| 
    context.response.content_type = mime 
end 

puts "Listening at #{host}:#{port}" 
server.listen 

여기 내 목표는 디렉토리를 나열하고 싶지 않다는 것입니다. URL 표시 줄에 index.html을 넣지 않고도 public/에있는 경우 실제로는 index.html을 제공하고 싶습니다. public/index.html이 실제로 존재한다고 가정 해 보겠습니다. 유용 할 수도있는 문서에 대한 포인터가 있습니까?

답변

3

이와 비슷한?

require "http/server" 

port = 8080 
host = "127.0.0.1" 
mime = "text/html" 

server = HTTP::Server.new(host, port, [ 
    HTTP::ErrorHandler.new, 
    HTTP::LogHandler.new, 
]) do |context| 
    req = context.request 

    if req.method == "GET" && req.path == "/public" 
    filename = "./public/index.html" 
    context.response.content_type = "text/html" 
    context.response.content_length = File.size(filename) 
    File.open(filename) do |file| 
     IO.copy(file, context.response) 
    end 
    next 
    end 

    context.response.content_type = mime 
end 

puts "Listening at #{host}:#{port}" 
server.listen