Crystal-lang no overload соответствует 'HTTP :: Server.new' с типом Int32 http server - PullRequest
0 голосов
/ 25 июня 2018

Я новичок в Crystal-lang.

Я пробую пример Http Server , приведенный в документах Crystal-Lang.

require "http/server"

server = HTTP::Server.new(8080) do |context|
  context.response.content_type = "text/plain"
  context.response.print "Hello world! The time is #{Time.now}"
end

puts "Listening on http://127.0.0.1:8080"
server.listen

Когда я запускаю этот код, я получаю следующую ошибку:

Error in httpserv.cr:3: no overload matches 'HTTP::Server.new' with type Int32
Overloads are:
 - HTTP::Server.new(handlers : Array(HTTP::Handler), &handler)
 - HTTP::Server.new(&handler)
 - HTTP::Server.new(handlers : Array(HTTP::Handler))
 - HTTP::Server.new(handler : HTTP::Handler | HTTP::Handler::Proc)

server = HTTP::Server.new(8080) do |context|

Что я могу из этого извлечь, мне нужно указать некоторые методы / функции для обработки HTTP-запросов, но я не понимаю, какчтобы сделать это.

Как правильно сделать это мой вопрос?

Заранее спасибо.

1 Ответ

0 голосов
/ 25 июня 2018

API HTTP::Server изменился в последней версии Crystal 0.25.0.Его использование задокументировано в последних API документах (в документах выпуска 0.25.0 есть небольшая ошибка, но это исправлено на master).

Как видно из сообщения об ошибке,подпись Server.new изменилась.Теперь он принимает только некоторую форму обработчика.Вы уже определили это в своем примере в блоке do.Конструктор больше не принимает номер порта, но вам нужно отдельно вызывать #bind_tcp.

Теперь ваш пример должен выглядеть следующим образом:

require "http/server"

server = HTTP::Server.new do |context|
  context.response.content_type = "text/plain"
  context.response.print "Hello world! The time is #{Time.now}"
end

address = server.bind_tcp 8080
puts "Listening on http://#{address}"
server.listen
...