Я создаю свое первое веб-приложение в Elm, и у меня есть проблема: когда я делаю запрос на получение на локальный сервер, Elm говорит, что это «NetworkError», хотя консоль браузера говорит, что это сработало.
Я сделал минимальный пример следующим образом:
Сервер создан на Haskell и Scotty:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Web.Scotty
import Data.Text.Lazy (pack)
main :: IO ()
main = scotty 3000 $ get "/" $ text $ pack "a"
Все, что он делает, это отвечает буквой «a», когда вы делаете запрос на получение на localhost: 3000. Приложение Elm просто отображает ответ, если он есть, и ошибку, если она есть, и кнопку для выполнения запроса на получение:
import Http exposing (getString, send, Error)
import Html exposing (Html, text, br, button, body, program)
import Html.Events exposing (onClick)
type Msg
= DataRequest (Result Error String)
| Refresh
type alias Model =
{ response : String
, err : String
}
main : Program Never Model Msg
main = program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}
subscriptions : Model -> Sub Msg
subscriptions _ = Sub.none
init : (Model, Cmd Msg)
init = ({ response = "", err = ""} , Cmd.none)
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
DataRequest (Err err) -> ({ model | err = toString err}, Cmd.none)
DataRequest (Ok response) -> ({model | response = response}, Cmd.none)
Refresh -> (model, send DataRequest (getString "http://localhost:3000"))
view : Model -> Html Msg
view {response, err} =
body []
[ text <| "Response: " ++ response
, br [] []
, text <| "Error: " ++ err
, br [] []
, button [ onClick Refresh ] [ text "Send request" ]
]
Вот скриншот консоли браузера, когда я делаю запрос на получение. Я не особо разбираюсь в этом, но, насколько я вижу, все выглядит хорошо.
Я хочу, чтобы в «Ответе» после него отображалась буква «а», а «Ошибка» была пустой. Вместо этого «Ошибка» — это «NetworkError», а «Ответ» пуст.
Я поместил этот минимальный пример в репозиторий Git на случай, если кто-то будет достаточно любезен, чтобы попробовать его и сказать мне, что не так:
https://github.com/8n8/elmnetworkerror
(Я знаю, что есть очень похожий вопрос в https://stackoverflow.com/questions/48818455/elm-http-request-returns-networkerror-for-successful-requests, но пока нет ответов, и я подумал, что было бы полезно получить полный минимальный пример.)