Crystal-lang没有重载与Int32 http服务器类型匹配的'HTTP :: Server.new'

时间:2018-06-25 12:07:08

标签: http server crystal-lang

我是Crystal-lang的新手。

我正在尝试crystal-lang文档中给出的 Http Server 示例。

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 :(得分:4)

HTTP::Server API在最新版本的Crystal 0.25.0中已更改。最近的API docs中记录了它的用法(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