This page covers Elm 0.18

플레이어 커맨드

API 를 통해 플레이어를 업데이트하는 커맨드를 만듭니다.

src/Players/Commands.elm 에 아래 내용을 추가합니다:

import Json.Encode as Encode

...

saveUrl : PlayerId -> String
saveUrl playerId =
    "http://localhost:4000/players/" ++ playerId


saveRequest : Player -> Http.Request Player
saveRequest player =
    Http.request
        { body = memberEncoded player |> Http.jsonBody
        , expect = Http.expectJson memberDecoder
        , headers = []
        , method = "PATCH"
        , timeout = Nothing
        , url = saveUrl player.id
        , withCredentials = False
        }


save : Player -> Cmd Msg
save player =
    saveRequest player
        |> Http.send OnSave


memberEncoded : Player -> Encode.Value
memberEncoded player =
    let
        list =
            [ ( "id", Encode.string player.id )
            , ( "name", Encode.string player.name )
            , ( "level", Encode.int player.level )
            ]
    in
        list
            |> Encode.object

저장 요청 (Save request)

saveRequest : Player -> Http.Request Player
saveRequest player =
    Http.request
        { body = memberEncoded player |> Http.jsonBody ➊
        , expect = Http.expectJson memberDecoder ➋
        , headers = []
        , method = "PATCH" ➌
        , timeout = Nothing
        , url = saveUrl player.id
        , withCredentials = False
        }

➊ 주어진 플레이어를 JSON 문자열로 인코드합니다. ➋ 돌아오는 응답을 어떻게 파싱할지 지정합니다. 현재는 돌아온 JSON 데이터를 Elm 값으로 디코딩합니다. ➌ PATCH 는 우리 API 에서 레코드의 업데이트를 위해 제공하는 http 메소드입니다.

저장

save : Player -> Cmd Msg
save player =
    saveRequest player ➊
        |> Http.send OnSave

Http.send ➋ 를 사용해 앞에서 만든 메시지와 저장 요청 ➊ 을 엮어 커맨드로 만듭니다. Http.send 는 메시지 생성자 (이 경우 OnSave) 를 인자로 받습니다. 요청이 처리되면, Elm 에서 요청의 결과를 OnSave 에 담아 호출합니다.

results matching ""

    No results matching ""