diff --git a/pages/api/posts.js b/pages/api/posts.js new file mode 100644 index 00000000..b5b56376 --- /dev/null +++ b/pages/api/posts.js @@ -0,0 +1 @@ +export { fetchData as default } from "../../output/Pages.Api.Posts/index.js" \ No newline at end of file diff --git a/spago.dhall b/spago.dhall index 948e4658..0f28991d 100644 --- a/spago.dhall +++ b/spago.dhall @@ -8,6 +8,7 @@ , "either" , "http-methods" , "maybe" + , "node-http" , "prelude" , "react-basic-dom" , "react-basic-hooks" diff --git a/src/Next/Response.js b/src/Next/Response.js new file mode 100644 index 00000000..39237655 --- /dev/null +++ b/src/Next/Response.js @@ -0,0 +1,3 @@ +exports._sendString = function(res, str) { + res.send(str) +} \ No newline at end of file diff --git a/src/Next/Response.purs b/src/Next/Response.purs new file mode 100644 index 00000000..207e5f6a --- /dev/null +++ b/src/Next/Response.purs @@ -0,0 +1,11 @@ +module Next.Response (sendString) where + +import Prelude +import Effect (Effect) +import Effect.Uncurried (runEffectFn2, EffectFn2) +import Node.HTTP (Response) + +foreign import _sendString :: EffectFn2 Response String Unit + +sendString :: Response -> String -> Effect Unit +sendString = runEffectFn2 _sendString diff --git a/src/Pages/Api/Posts.purs b/src/Pages/Api/Posts.purs new file mode 100644 index 00000000..461d4ae8 --- /dev/null +++ b/src/Pages/Api/Posts.purs @@ -0,0 +1,46 @@ +module Pages.Api.Posts (fetchData) where + +import Prelude +import Affjax as AX +import Affjax.ResponseFormat as ResponseFormat +import Config (apiEndpoint) +import Control.Promise (Promise, fromAff) +import Data.Either (Either(..), either) +import Data.HTTP.Method (Method(..)) +import Effect.Aff (Aff) +import Effect.Aff.Compat (mkEffectFn2) +import Effect.Class (liftEffect) +import Effect.Console as Console +import Effect.Uncurried (EffectFn2) +import Next.Response (sendString) +import Node.HTTP (Request, Response, setStatusCode) + +--fetchData :: forall ctx. ctx -> Aff Props +_fetchData :: Request -> Response -> Aff Unit -- (Either Error String) +_fetchData _req resp = do + res <- AX.request (AX.defaultRequest { url = apiEndpoint <> "/posts/1", method = Left GET, responseFormat = ResponseFormat.string }) + liftEffect + $ do + Console.log $ either AX.printError _.body res + case res of + Left e -> do + setStatusCode resp 500 + sendString resp (AX.printError e) + Right r -> do + setStatusCode resp 200 + sendString resp (r.body) + +--pure ((arg <> _) <<< _.body <$> res) +fetchData :: EffectFn2 Request Response (Promise Unit) +fetchData = mkEffectFn2 f + where + f req resp = fromAff $ _fetchData req resp + +-- _sayHi :: String -> Aff String +-- _sayHi name = do +-- delay $ Milliseconds 100.0 +-- pure $ "hello " <> name +-- sayHiDelayed :: String -> Effect (Promise String) +-- sayHiDelayed name = fromAff $ _sayHi name +-- sayHiNow :: EffectFn1 String (Promise String) +-- sayHiNow = mkEffectFn1 sayHiDelayed diff --git a/src/Pages/Home.purs b/src/Pages/Home.purs index 5bef2b31..b63e1b4e 100644 --- a/src/Pages/Home.purs +++ b/src/Pages/Home.purs @@ -49,7 +49,7 @@ mkHome = do , R.p { className: "pt-4 text-sm" , children: - [ R.text "Welcome to my Next.js with Purescript Example!" + [ R.text "Purescript Example - changed!" ] } ] @@ -59,7 +59,7 @@ mkHome = do , children: [ R.img { className: "shadow-2xl" - , src: "https://source.unsplash.com/IuLgi9PWETU" + , src: "https://source.unsplash.com/cvBBO4PzWPg" } ] }