无法使CORS正常运行Scotty网络服务器Haskell

问题描述

am试图配置Web服务器(Haskell,使用Scotty)以响应CORS请求。 Main.hs代码文章末尾,这里是the repo。我已经注释掉了middleware corsPolicy行。注释掉该行后,服务器会正​​确响应GET /analytics/helloPOST /analytics,它们都使用curl发送,而后者接受JSON数据,如

{"userName":  "jxxcarlson","eventName":  "login","eventTime":  12234.77}

当该行未注释掉时,服务器运行,但是控制台中显示以下内容

GET /analytics/hello
  Accept: */*
  Status: 200 OK 0.000046s
POST /analytics
  Request Body: {"userName":  "jxxcarlson","eventTime":  12234.77}
  Accept: */*
  Status: 200 OK 0.001564s
POST /analytics
  Request Body: {"username":"_no_user_","eventName":"signin:attempt","currentTime":1604251628.681}
  Accept: */*
  Status: 422 Unprocessable Entity 0.000041s
POST /analytics
  Request Body: {"username":"jxxcarlson","eventName":"signin:successful","currentTime":0}
  Accept: */*
  Status: 422 Unprocessable Entity 0.000038s

前两个请求是通过curl发出的,后两个请求来自浏览器中运行的应用。

以下是将请求发送到服务器的代码

postWithUser : Maybe User -> String ->  Time.Posix -> Cmd FrontendMsg   
postWithUser  maybeUser eventName currentTime  =  
   Http.request 
      { method = "POST",headers = [Http.header "Content-Type" "application/json"],url = Config.analyticsServer ++ "/analytics",body = Http.jsonBody (encodeEventWithUser maybeUser eventName currentTime),expect  = Http.expectWhatever AnalyticsDataSent,timeout = nothing,tracker = nothing
      }

这是服务器代码

port :: Int
port = 8080

main :: IO ()
main = do
    conn <- connectPostgresql ("host='127.0.0.1' user='jxx' dbname='forscotty' password='jxx'")
    scotty port $ do
       -- middleware corsPolicy
       middleware logStdoutDev
       server conn

      

server :: Connection -> ScottyM()
server conn = do

    post "/analytics" $ do
        event <- jsonData :: ActionM Event
        newItem <- liftIO (insertEvent conn event)
        json newItem

    get "/analytics/hello" $ do
      html .  T.pack $ "Yes,I'm still alive"


insertEvent :: Connection -> Event -> IO EventEntity
insertEvent conn event = do
    let insertQuery = "insert into events (userName,eventName,eventTime) values (?,?,?) returning id"
    [Only id] <- query conn insertQuery event
    return $ entityFromEvent id event  

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)