我使用的是反射-DOM的版本0.4的僕人服務器,我有一個微小的反射-DOM客戶端:接取與反射-DOM客戶
{-# LANGUAGE OverloadedStrings #-}
import Reflex.Dom
import qualified Data.Text as T
import Data.Monoid
main :: IO()
main = mainWidget body
body :: MonadWidget t m => m()
body = el "div" $ do
pb <- getPostBuild
snd <- button "Send"
-- Use one of the following URL's:
let defReq = "http://localhost:8080/name/3"
-- let defReq = "https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY"
let req = XhrRequest "GET" defReq (def {_xhrRequestConfig_sendData = defReq})
let evReq = tagPromptlyDyn (constDyn req) snd
evRsp <- performRequestAsync evReq
let evResult = (result . _xhrResponse_responseText) <$> evRsp
el "p" $ return()
dynText =<< holdDyn "NOPE" evResult
return()
result :: Show a => Maybe a -> T.Text
result (Just x) = "Received: " <> T.pack (show x)
result Nothing = "Response is Nothing"
如XhrRequest with reflex/reflex-dom描述,我使用_xhrResponse_responseText而不是decodeXhrResponse。
當我運行這個客戶端與NASA的URL,它顯示一個很好的JSON字符串。因此,我認爲,這個反射客戶端正在工作。
我有一個小丫頭太服務器:
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
import Servant
import Servant.API
import Servant.Server
import Network.Wai
import Network.Wai.Handler.Warp
import Network.Wai.Logger (withStdoutLogger)
import qualified Data.Text as T
main :: IO()
main = withStdoutLogger $ \aplogger -> do
let settings = setPort 8080 $ setLogger aplogger defaultSettings
runSettings settings app
app :: Application
app = serve userAPI server
userAPI :: Proxy API -- API usage: http://localhost:8080/name/2
userAPI = Proxy
type API = "name" :> Capture "pid" Int :> Get '[PlainText] T.Text
server :: Server API
server = name
name :: Monad m => Int -> m T.Text
name pid = return $ nameById pid
nameById :: Int -> T.Text
nameById 1 = "Isaac Newton"
nameById 2 = "Galileo Galilei"
nameById 3 = "Marie Curie"
nameById _ = "UNKNOWN!!"
當我訪問了瀏覽器該服務器與http://localhost:8080/name/3
或curl
,我看到預期的結果Marie Curie
。因此,我認爲,這個僕人服務器正在工作。
當我運行與本地主機的URL上面反射-DOM客戶端,我可以看到服務器的標準輸出日誌的請求,但該客戶端不顯示居里夫人的名稱。相反,客戶端只顯示一個空字符串! 因此,作爲一個團隊,客戶端和服務器不能一起工作!爲什麼?
謝謝!我看不到錯誤信息。然而,使用'simpleCors'解決了這個問題!我必須閱讀有關_Cross-Origin資源共享(CORS)_材料...... – Jogger