Handler.purs (1452B)
1 module Handler 2 ( Response 3 , Request 4 , serveNotFound 5 , serveUnauthorized 6 , serveInternalError 7 , serveBadRequest 8 , serveError 9 , respond 10 ) where 11 12 import Prelude 13 14 import Effect (Effect) 15 import Node.Encoding (Encoding(UTF8)) 16 import Node.HTTP.OutgoingMessage (setHeader, toWriteable) 17 import Node.HTTP.ServerResponse (setStatusCode, toOutgoingMessage) 18 import Node.Stream (end, writeString) 19 import Node.HTTP.Types (ServerResponse, IncomingMessage, IMServer) 20 21 type Request = IncomingMessage IMServer 22 23 type Response = ServerResponse 24 25 respond :: String -> Int -> String -> Response -> Effect Unit 26 respond contentType statusCode body res = do 27 setHeader "Content-Type" contentType (toOutgoingMessage res) 28 setStatusCode statusCode res 29 let w = toWriteable (toOutgoingMessage res) 30 void $ writeString w UTF8 body 31 end w 32 33 serveNotFound :: Response -> Effect Unit 34 serveNotFound = respond "text/plain" 404 "Not Found" 35 36 serveUnauthorized :: Response -> Effect Unit 37 serveUnauthorized = respond "text/plain" 401 "Unauthorized" 38 39 serveInternalError :: Response -> Effect Unit 40 serveInternalError = respond "text/plain" 500 "Internal Server Error" 41 42 serveBadRequest :: Response -> String -> Effect Unit 43 serveBadRequest res message = respond "text/plain" 400 message res 44 45 serveError :: Response -> Int -> String -> String -> Effect Unit 46 serveError res statusCode statusName message = 47 respond "text/plain" statusCode (statusName <> ": " <> message) res