nikodream/bin/nikodream.ml
2025-05-08 12:27:28 +05:30

35 lines
1.0 KiB
OCaml

open Lwt.Infix
open Lwt.Syntax
let successful = ref 0
let failed = ref 0
(* middleware *)
let count_requests inner_handler request =
try%lwt
inner_handler request >>= fun response ->
successful := !successful + 1;
Lwt.return response
with exn ->
failed := !failed + 1;
raise exn
let () =
Dream.run @@ Dream.logger @@ count_requests
@@ Dream.router
[
Dream.get "/" (fun _ -> Dream.html "Hello, world!");
Dream.get "/error" (fun _ -> failwith "failed on purpose");
Dream.get "/count" (fun _ ->
Dream.html
(Printf.sprintf "%3i successful requests<br>%3i failed requests"
!successful !failed));
Dream.get "/echo/:word" (fun request ->
Dream.html (Dream.param request "word"));
Dream.post "/echo" (fun request ->
let* body = Dream.body request in
Dream.respond
~headers:[ ("Content-Type", "application/octet-stream") ]
body);
]