Я хотел заглянуть в веб-разработку с помощью haskell для back-end и elm для front-end. Поэтому я написал эти два простых фрагмента кода кода "hello world"
elm:
import Html exposing (..)
import Html.Events exposing (..)
import Http
import Json.Decode as Decodemain : Program Never Model Msg
main = Html.program
{ view = view
, update = update
, init = ("default", Cmd.none)
, subscriptions = \_ -> Sub.none }type alias Model = Stringtype Msg = Get | Response (Result Http.Error String)update : Msg -> Model -> (Model, Cmd Msg)
update msg model = case msg of
Get -> (model, get)
Response (Ok s) -> (s, Cmd.none)
Response (Err e) -> (toString e, Cmd.none)view : Model -> Html Msg
view model = div []
[button [onClick (Get)] [text "click me"],
text model]get : Cmd Msg
get = let url = "http://localhost:3000/get"
in Http.send Response (Http.get url Decode.string)
haskell / scotty:
import Web.Scottymain = scotty 3000 $ get "/get" $ json ("hello world" :: String)
оба работают отлично сами по себе - это означает, что код вяза может получать данные с серверов, таких как httpbin, и сервер scotty обрабатывает запросы, которые я отправляю с помощью браузера или таких инструментов, как wget / curl и т. д., но когда я пытаюсь использовать их вместе вызов http.send в elm возвращает ошибку сети.
Я подозреваю, что это может быть проблема, когда оба сервера размещены на одном компьютере (не знаю, почему, но я хотел исключить возможность), поэтому я размещал клиентский сайт на другом компьютере, который, как я знаю, имеет рабочее соединение с компьютером, на котором размещен back-end (работает с wget и т. д.), но он все равно не работает.
Мне не хватает чего-то очевидного , или в чем проблема? thx заранее
Похоже, что ваша проблема связана с ограничениями, связанными с перекрестными запросами (CORS). Вы можете использовать wai-cors для установки политики CORS.
Пример: