Adds not found and error handlers

master
Abhinav Sarkar 2017-09-30 14:37:07 +05:30
parent 9fdfe3a155
commit 9be24a1091
1 changed files with 18 additions and 1 deletions

View File

@ -6,12 +6,21 @@ import Control.Monad.Aff (runAff)
import Control.Monad.Eff (Eff) import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Class (liftEff) import Control.Monad.Eff.Class (liftEff)
import Control.Monad.Eff.Console (CONSOLE, log, logShow) import Control.Monad.Eff.Console (CONSOLE, log, logShow)
import Control.Monad.Eff.Exception (message)
import Data.Either (fromRight)
import Data.String.Regex (Regex, regex) as Re
import Data.String.Regex.Flags (noFlags) as Re
import Database.PostgreSQL as PG import Database.PostgreSQL as PG
import Node.Express.App (App, delete, get, http, listenHttp, post, useExternal) import Node.Express.App (App, all, delete, get, http, listenHttp, post, useExternal, useOnError)
import Node.Express.Response (sendJson, setStatus)
import Node.Express.Types (EXPRESS, Method(..)) import Node.Express.Types (EXPRESS, Method(..))
import Partial.Unsafe (unsafePartial)
import SimpleService.Handler (createUser, deleteUser, getUser, listUsers, updateUser) import SimpleService.Handler (createUser, deleteUser, getUser, listUsers, updateUser)
import SimpleService.Middleware.BodyParser (jsonBodyParser) import SimpleService.Middleware.BodyParser (jsonBodyParser)
allRoutePattern :: Re.Regex
allRoutePattern = unsafePartial $ fromRight $ Re.regex "/.*" Re.noFlags
app :: forall eff. PG.Pool -> App (postgreSQL :: PG.POSTGRESQL | eff) app :: forall eff. PG.Pool -> App (postgreSQL :: PG.POSTGRESQL | eff)
app pool = do app pool = do
useExternal jsonBodyParser useExternal jsonBodyParser
@ -21,6 +30,14 @@ app pool = do
post "/v1/users" $ createUser pool post "/v1/users" $ createUser pool
patch "/v1/user/:id" $ updateUser pool patch "/v1/user/:id" $ updateUser pool
get "/v1/users" $ listUsers pool get "/v1/users" $ listUsers pool
all allRoutePattern do
setStatus 404
sendJson {error: "Route not found"}
useOnError \err -> do
setStatus 500
sendJson {error: message err}
where where
patch = http (CustomMethod "patch") patch = http (CustomMethod "patch")