错误:未绑定的记录字段服务器.callback - Ocaml



我正在遵循一个教程,解释如何在lwtCohttp的OCaml中制作一个简单的web服务器。

我有一个_tags文件,包含以下内容:

true: package(lwt), package(cohttp), package(cohttp.lwt)

And a webserver.ml:

open Lwt
open Cohttp
open Cohttp_lwt_unix
let make_server () =
  let callback conn_id req body =
    let uri = Request.uri req in
    match Uri.path uri with
    | "/" -> Server.respond_string ~status:`OK ~body:"hello!n" ()
    | _ -> Server.respond_string ~status:`Not_found ~body:"Route not found" ()
  in
  let conn_closed conn_id () = () in
  Server.create { Server.callback; Server.conn_closed }
let _ =
  Lwt_unix.run (make_server ())

然后,ocamlbuild -use-ocamlfind webserver.native触发以下错误:

Error: Unbound record field callback
Command exited with code 2.

如果我更改为:Server.create { callback; conn_closed },它也会触发:

Error: Unbound record field callback
Command exited with code 2.

我不知道如何解决这个问题,所以提前感谢你的调查。

可能,您正在使用一个非常过时的教程,这是为旧的cohttp界面编写的。您可以尝试查看上游存储库中的最新教程。

在您的情况下,至少应该做以下更改,以编译程序:

  1. 您应该使用Server.make函数来创建一个服务器实例;
  2. callbackconn_closed值应该作为函数参数传递,而不是作为记录传递,例如

    Server.make ~callback ~conn_closed ()
    
  3. 您应该使用Server.create函数并传递从Server.make函数返回的值来创建服务器实例。

所以,下面的代码应该可以工作:

open Lwt
open Cohttp
open Cohttp_lwt_unix
let make_server () =
  let callback conn_id req body =
    let uri = Request.uri req in
    match Uri.path uri with
    | "/" -> Server.respond_string ~status:`OK ~body:"hello!n" ()
    | _ -> Server.respond_string ~status:`Not_found ~body:"Route not found" ()
  in
  Server.create (Server.make ~callback ())
let _ =
  Lwt_unix.run (make_server ())

相关内容

  • 没有找到相关文章

最新更新