summaryrefslogtreecommitdiff
path: root/bs5/server/server.ml
blob: c7c18e9d3eadc6ec4a507dc07440b94f63d1d347 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
(* TODO *)
(* Dream.origin_referrer_check *)

let getAndPost path handler =
  Dream.scope "/" []
    [
      Dream.get path handler;
      Dream.post path Rsc.DreamRSC.stream_function_response;
    ]

let router =
  Dream.router
    ([
       (* rendering tricks *)
       Dream.get "/output.css"
         (Dream.from_filesystem "./_build/default/demo" "output.css");
       Dream.get "/static/**" (Dream.static "./_build/default/client/app");
       getAndPost Router.demoRenderToString (fun _ ->
           Dream.html Pages.Hydrate.toString);
       getAndPost Router.demoRenderToString (fun _ ->
           Dream.html Pages.Hydrate.toStatic);
       (* more demos *)
       getAndPost Router.demoRenderToStream Pages.Comments.handler;
       getAndPost Router.demoSinglePageRSC Pages.SinglePageRSC.handler;
       getAndPost Router.demoRouterRSC Pages.RouterRSC.handler;
       getAndPost Router.demoServerOnlyRSC Pages.ServerOnlyRSC.handler;
       (* my actual routes *)
       Dream.get "/root" (fun _ -> Dream.html "Roooot");
       Dream.get "/login" (fun _ -> Dream.html "Welcome");
       Dream.get "/blog/:poast" (fun req ->
           Dream.html (Dream.param req "poast"));
       Dream.get "/react" (fun _ -> Dream.html "Welcome");
       Dream.get "/fail" (fun _ -> raise (Failure "Oh noes"));
       Dream.post "/echo" (fun req ->
           let%lwt body = Dream.body req in
           Dream.respond ~headers:[ ("Content-Type", "application/json") ] body);
       Dream.get "/" Pages.Index.handler;
     ]
    @ Api.Json.routes @ Api.Stream.streams)

let server =
  Dream.logger @@ Middleware.Logs.detailed_logger
  @@ Middleware.Promise.count_requests
  @@ Middleware.Counter.count_requests router

let () = Dream.run ~port:4444 server