【问题标题】:Crystal-lang no overload matches 'HTTP::Server.new' with type Int32 http serverCrystal-lang 无重载匹配 'HTTP::Server.new' 类型为 Int32 http 服务器
【发布时间】:2018-12-04 00:13:42
【问题描述】:

我是 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 请求,但我不知道如何做到这一点。

我的问题是正确的方法是什么?

提前致谢。

【问题讨论】:

    标签: http server crystal-lang


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      相关资源
      最近更新 更多