From a6fd74498b1d9539aa7c797559344e5b238dfe81 Mon Sep 17 00:00:00 2001 From: Fraser Mince Date: Sun, 24 Sep 2017 16:39:52 -0500 Subject: [PATCH 1/2] Add headers into fileserver. --- src/Hyper/Node/FileServer.purs | 14 +++++++++----- test/Hyper/Node/FileServerSpec.purs | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Hyper/Node/FileServer.purs b/src/Hyper/Node/FileServer.purs index bd5d238..9ce3a4f 100644 --- a/src/Hyper/Node/FileServer.purs +++ b/src/Hyper/Node/FileServer.purs @@ -18,6 +18,7 @@ import Node.FS (FS) import Node.FS.Aff (readFile, stat, exists) import Node.FS.Stats (isDirectory, isFile) import Node.Path (FilePath) +import Data.Array (null) serveFile :: forall m e req res c b @@ -26,18 +27,20 @@ serveFile => ResponseWritable b m Buffer => Response res m b => FilePath + -> Array (Tuple String String) -> Middleware m (Conn req (res StatusLineOpen) c) (Conn req (res ResponseEnded) c) Unit -serveFile path = do +serveFile path userProvidedHeaders = do buf <- lift' (liftAff (readFile path)) contentLength <- liftEff (Buffer.size buf) - _ <- writeStatus statusOK - _ <- headers [ Tuple "Content-Type" "*/*; charset=utf-8" + let h = [ Tuple "Content-Type" "*/*; charset=utf-8" , Tuple "Content-Length" (show contentLength) ] + _ <- writeStatus statusOK + _ <- headers $ if null userProvidedHeaders then h else userProvidedHeaders response <- toResponse buf _ <- send response end @@ -57,18 +60,19 @@ fileServer (Conn req (res StatusLineOpen) c) (Conn req (res ResponseEnded) c) Unit + -> Array (Tuple String String) -> Middleware m (Conn req (res StatusLineOpen) c) (Conn req (res ResponseEnded) c) Unit -fileServer dir on404 = do +fileServer dir on404 headers = do conn ← getConn { url } <- getRequestData serve (Path.concat [dir, url]) where serveStats absolutePath stats - | isFile stats = serveFile absolutePath + | isFile stats = serveFile absolutePath headers | isDirectory stats = serve (Path.concat [absolutePath, "index.html"]) | otherwise = on404 diff --git a/test/Hyper/Node/FileServerSpec.purs b/test/Hyper/Node/FileServerSpec.purs index c52b267..2d7e2f7 100644 --- a/test/Hyper/Node/FileServerSpec.purs +++ b/test/Hyper/Node/FileServerSpec.purs @@ -33,7 +33,7 @@ serveFilesAndGet path = # evalMiddleware app # testServer where - app = fileServer "test/Hyper/Node/FileServerSpec" on404 + app = fileServer "test/Hyper/Node/FileServerSpec" on404 [] on404 = do body <- liftEff (Buffer.fromString "Not Found" UTF8) From c7240b50a641860221b729f2ccc0ccfac6291321 Mon Sep 17 00:00:00 2001 From: Fraser Mince Date: Sun, 24 Sep 2017 16:54:49 -0500 Subject: [PATCH 2/2] Mappend default headers with user headers. --- src/Hyper/Node/FileServer.purs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Hyper/Node/FileServer.purs b/src/Hyper/Node/FileServer.purs index 9ce3a4f..3218638 100644 --- a/src/Hyper/Node/FileServer.purs +++ b/src/Hyper/Node/FileServer.purs @@ -18,7 +18,6 @@ import Node.FS (FS) import Node.FS.Aff (readFile, stat, exists) import Node.FS.Stats (isDirectory, isFile) import Node.Path (FilePath) -import Data.Array (null) serveFile :: forall m e req res c b @@ -40,7 +39,7 @@ serveFile path userProvidedHeaders = do , Tuple "Content-Length" (show contentLength) ] _ <- writeStatus statusOK - _ <- headers $ if null userProvidedHeaders then h else userProvidedHeaders + _ <- headers $ h <> userProvidedHeaders response <- toResponse buf _ <- send response end