Intereting Posts
Встроенный обмен сообщениями Chrome на windowsх `Unhandled Exception: System.ArgumentNullException: значение не может быть ошибкой null.` при запуске` dotnet run` с использованием сценария запуска Ubuntu – Ошибка: не удалось создать SD-карту Как изменить выходной цвет эха в Linux Используйте grep для поиска слов, начинающихся с буквы “s” Как использовать команду linux flock для предотвращения удаления другого файла root? OpenAI Gym Atari в Windows Mac OS X не позволяет указывать файлы, начинающиеся с точки. Как я могу назвать файл .htaccess? Maven на Windows 7 без прав администратора – mvn.bat не доверяет загрузке из Интернета два дескриптора файла в один файл Как записать память пространства ядра (физический адрес) в файл с помощью O_DIRECT? Как разрешить конфликт библиотеки (apache commons-codec) Отправка данных в цикле приводит к повреждению памяти malloc Java TLS, который не зависит от DLP или простой факторизации Есть ли какая-нибудь библиотека COM для Java, которая работает хорошо?

Crystal-lang no overload соответствует «HTTP :: Server.new» с типом HTTP-сервера Int32

Я новичок в 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-запросов, но я не понимаю, как это сделать.

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

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

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

Как видно из сообщения об ошибке, подпись 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