30 lines
1 KiB
OCaml
30 lines
1 KiB
OCaml
|
|
module S = Tiny_httpd
|
||
|
|
|
||
|
|
let asset_loader path =
|
||
|
|
match Content.read path with None -> assert false | Some asset -> asset
|
||
|
|
|
||
|
|
let () =
|
||
|
|
let server = S.create ~port:8000 () in
|
||
|
|
S.add_route_handler ~meth:`GET server S.Route.return (fun _req ->
|
||
|
|
S.Response.make_string
|
||
|
|
~headers:[ ("Content-Type", "text/html") ]
|
||
|
|
(Ok (asset_loader "index.html")) );
|
||
|
|
|
||
|
|
S.add_route_handler ~meth:`GET server
|
||
|
|
S.Route.(exact "script.js" @/ return)
|
||
|
|
(fun _req ->
|
||
|
|
S.Response.make_string
|
||
|
|
~headers:[ ("Content-Type", "application/javascript") ]
|
||
|
|
(Ok (asset_loader "script.js")) );
|
||
|
|
|
||
|
|
S.add_route_handler ~meth:`GET server
|
||
|
|
S.Route.(exact "style.css" @/ return)
|
||
|
|
(fun _req ->
|
||
|
|
S.Response.make_string
|
||
|
|
~headers:[ ("Content-Type", "text/css") ]
|
||
|
|
(Ok (asset_loader "style.css")) );
|
||
|
|
|
||
|
|
Printf.printf "listening on http://%s:%d\n%!" (S.addr server) (S.port server);
|
||
|
|
ignore @@ Sys.command "xdg-open http://localhost:8000";
|
||
|
|
ignore (match S.run server with Ok () -> () | Error e -> raise e)
|