【问题标题】:How to display Response from an HTTP GET Request in front-end using Scotty?如何使用 Scotty 在前端显示来自 HTTP GET 请求的响应?
【发布时间】:2017-08-09 13:46:49
【问题描述】:

我是第一次尝试 Scotty,但我似乎无法通过提出 GET 请求。响应作为类型返回

IO (Response bytestring-0.10.8.1:Data.ByteString.Lazy.Internal.ByteString)

我知道我需要将其转换为 Scotty 可以输出的类型,但我不知道该怎么做。

我的完整代码是:

{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where

import           Control.Lens
import           Control.Monad.IO.Class
import           Data.Aeson             (FromJSON, ToJSON, Value, decode,
                                         encode)
import           Data.Map               as Map
import           GHC.Generics
import           Lib
import           Network.Wreq           as Wreq
import           Web.Scotty             as Scotty

main :: IO ()
main =
  scotty 3000 $
   Scotty.get "/" $ do
    -- html "Hello World!"
     Wreq.get"https://www.metaweather.com/api/location/search/?query=New%20York"

我尝试使用 LiftIO,但这仍然给我一个类型错误。我想知道我应该如何准确地转换我的响应,以便我可以在前端显示它,就像我用 html 显示我最初的“Hello World”一样。

【问题讨论】:

    标签: haskell haskell-stack io-monad scotty wreq


    【解决方案1】:

    如果您只是在寻找一个快速的概念证明并且不担心错误响应,您可以使用responseBody 镜头并将惰性字节字符串发送到raw 而不是html:

    main :: IO ()
    main =
      scotty 3000 $
       Scotty.get "/" $ do
         r <- liftIO $ Wreq.get "https://www.metaweather.com/api/location/search/?query=New%20York"
         raw (r ^. responseBody)
    

    【讨论】:

    • 非常感谢您的回复。但是,我仍然收到此代码错误。我编辑了倒数第二行以包含 LiftIO 以使其正确运行。 r metaweather.com/api/location/search/?query=New%20York"
    • 有什么快速简便的方法可以将 ByteString 转换为文本? (这是我需要使用 html 而不是 raw)
    • 糟糕!我忘记了liftIO。谢谢,我已经更新了答案
    • string-conversions 包的cs 函数是一种非常简单的转换方法。例如cs (r ^. responseBody) :: Text
    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2019-08-10
    • 2014-07-24
    • 2021-08-28
    • 1970-01-01
    相关资源
    最近更新 更多