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

标签 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 请求,但我不知道如何去做。

这是我的问题,正确的做法是什么?

提前致谢。

最佳答案

HTTP::Server API 在最新版本 Crystal 0.25.0 中发生了变化。它的用途记录在最近的 API docs 中(0.25.0 版本文档有一个小错误,但它已在 master 上修复)。

从报错信息可以看出,Server.new的签名发生了变化。它现在只接受某种形式的处理程序。您已经在 do block 中的示例中定义了它。构造函数不再接受端口号,但您需要单独调用#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

关于http - Crystal-lang 没有重载匹配 'HTTP::Server.new' 类型为 Int32 的 http 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51023140/

相关文章:

crystal-lang - 使阻塞调用异步

crystal-lang - 是否有任何 HTML 解析库?

python - 如何进行具有多个过滤器的 Django 数据库查询?

java - Java 在哪里存储记住的 HTTP 基本身份验证密码以及如何删除它们?

node.js - 如何使 node.js 应用程序永久运行?

PHP - 如何在大量文件中替换字符串?

concurrency - 我怎样才能停止光纤?

http - 使用参数发出简单的 post 请求并接收响应

java - 如何在 Java 中向 http 请求方法添加新 header ?

php - 第一个请求后PHP开发服务器崩溃