首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Crystal-lang no重载将“HTTP::Server.new”与Int32 http服务器类型匹配。

Crystal-lang no重载将“HTTP::Server.new”与Int32 http服务器类型匹配。
EN

Stack Overflow用户
提问于 2018-06-25 12:07:07
回答 1查看 218关注 0票数 4

我是克里斯托朗的新手。

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

代码语言:javascript
复制
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

当我运行这段代码时,我会得到以下错误。

代码语言:javascript
复制
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请求,但我不知道如何这样做。

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

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-25 15:03:09

HTTP::Server API在最新发布的水晶0.25.0中发生了变化。它的使用记录在最近的API文档中( 0.25.0版本的文档有一个轻微的错误,但它是固定在主版上的)。

正如您从错误消息中看到的那样,Server.new的签名已经更改。它现在只接受某种形式的处理程序。您已经在do块中的示例中定义了这一点。构造函数不再接受端口号,但需要单独调用#bind_tcp

您的示例现在应该如下所示:

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51023140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档