当参数与工作示例相同时,为什么 Elm 不会为 JSON 数据示例编译这个 HTTP 请求?

我正在研究一个基本的解码 json Elm 示例以供练习,但无法找出 Elm 编译错误。我也很困惑为什么它在 Ellie 中运行(即使用远程 JSON URL),但在使用 Elm v 19.0 FYI 本地编译时却没有。


目标是进行一个简单的调用以从 Go 服务器获取 JSON,但仅编译我从文档中获得的用于解码 JSON 的示例 Elm 并没有成功,所以我们在这里。


module HelloWorld exposing (..)



import Browser

import Html exposing (..)

import Html.Attributes exposing (..)

import Html.Events exposing (..)

import Http

import Json.Decode exposing (Decoder, field, string)




-- MAIN



main =

  Browser.element

    { init = init

    , update = update

    , subscriptions = subscriptions

    , view = view

    }




-- MODEL



type Model

  = Failure

  | Loading

  | Success String



init : () -> (Model, Cmd Msg)

init _ =

  (Loading, getRandomCatGif)




-- UPDATE



type Msg

  = MorePlease

  | GotGif (Result Http.Error String)



update : Msg -> Model -> (Model, Cmd Msg)

update msg model =

  case msg of

    MorePlease ->

      (Loading, getRandomCatGif)


    GotGif result ->

      case result of

        Ok url ->

          (Success url, Cmd.none)


        Err _ ->

          (Failure, Cmd.none)




-- SUBSCRIPTIONS



subscriptions : Model -> Sub Msg

subscriptions model =

  Sub.none




-- VIEW



view : Model -> Html Msg

view model =

  div []

    [ h2 [] [ text "Random Cats" ]

    , viewGif model

    ]



viewGif : Model -> Html Msg

viewGif model =

  case model of

    Failure ->

      div []

        [ text "I could not load a random cat for some reason. "

        , button [ onClick MorePlease ] [ text "Try Again!" ]

        ]


    Loading ->

      text "Loading..."


    Success url ->

      div []

        [ button [ onClick MorePlease, style "display" "block" ] [ text "More Please!" ]

        , img [ src url ] []

        ]




-- HTTP



getRandomCatGif : Cmd Msg

getRandomCatGif =

  Http.get

    { url = "http://127.0.0.1:8080/test"

    , expect = Http.expectJson GotGif gifDecoder

    }



gifDecoder : Decoder String

gifDecoder =

  field "data" (field "image_url" string)

现在是 go 服务器


// write json back to elm call


package main


import (

    "fmt"

    "log"

    "net/http"

    "os"


    "github.com/gorilla/schema"

)


type ToDo struct {

    Title       string

    Description string

}



白衣染霜花
浏览 88回答 1
1回答

侃侃尔雅

看起来您已经安装了 1.0.0 版本的elm/http模块,而示例需要elm/http2.0.0 版本。我可以使用此软件包的 1.0.0 版本重现您的错误,但使用 2.0.0 成功编译的代码。编辑您的elm.json文件以更改 to 的版本elm/http并再次2.0.0尝试运行elm make ...。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go